单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出
作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了。我并不想危言耸听说一定还有你不知道的——毕竟我自己的了解也的确有限,但究竟你自己了解的程度到底怎样呢?往下看,我们一起来聊聊看~
单例对象的类必须保证只有一个实例存在——这是维基百科上对单例的定义,这也可以作为对意图实现单例模式的代码进行检验的标准。
对单例的实现可以分为两大类——懒汉式和饿汉式,他们的区别在于:
-
懒汉式:指全局的单例实例在第一次被使用时构建。
-
饿汉式:指全局的单例实例在类装载时构建。
从它们的区别也能看出来,日常我们使用的较多的应该是懒汉式的单例,毕竟按需加载才能做到资源的最大化利用嘛~
先来看一下懒汉式单例的实现方式。
package cn.heima.day3.text;
class Studnet {
//构造函数私有化
private Studnet() {
}
//构建一个对象
private static final Studnet st = new Studnet();
//返回本类对象
public static Studnet getInstance() {
//判断本类对象是否为null
if(st==null){
return new Studnet();
}
//返回本类对象
return st;
}
public void fun() {
System.out.println("飞");
}
}
//测试类
public class MySingle {
//程序入口
public static void main(String[] args) {
//获取本类对象
Studnet s = Studnet.getInstance();
s.fun();
if(s==Studnet.getInstance()){
System.out.println("相等");
}
}
}
其实有很多种写法 下面还有一种
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}