1.声明
设计模式中的设计思想、图片和部分代码参考自《Head First设计模式》,作者Eric Freeman & Elisabeth Freeman & Kathy Siezza & Bert Bates。
在这里我只是对这本书进行学习阅读,并向大家分享一些心得体会。
2.单例模式
2.1单例简介
单例模式就是让一个类实例化的对象只要一份,这样做的好处就是,例如在某些场合下,我们不希望这个类有多个对象,例如工具类、配置表、线程池(防止无限创建线程)。
Java的静态变量也可以做到单例,但是,有个缺陷是,静态变量会随着类加载而加载,那么如果没有用到的话,就会造成资源的浪费。
2.2经典的单利模式-懒汉式
懒汉式代码:
//单例模式-懒汉式
public class Singleton {
//静态成员
private static Singleton uniqueInstance;
//私有化构造方法,不让外部创建对象
private Singleton() {}
//获得本类实例的方法
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
使用方式:
public class SingletonClient {
public static void main(String[] args) {
//获取唯一对象
Singleton singleton = Singleton.getInstance();
System.out.println(singleton.getConfig());
}
}
懒汉式的缺陷:
看完代码,看上去确实蛮有道理的,但是设想,如果多个线程调用getInstance(),会不会出现线程不同步的问题呢?
线程不同步的问题猜想:
如果真如上图猜想的那样,那么就无法保证创建的对象是唯一的了。
但那仅仅是个猜想,为了考证,我们用代码验证一下。
懒汉式代码:
//单例模式-懒汉式
public class Singleton {
//静态成员
private static Singleton uniqueInstance;
//私有化构造方法,不让外部创建对象
private Si