定义
- 确保只生成一个实例的模式被称为Singleton模式。
Singleton模式中的登场角色
- Singleton
Singleton模式的类图
拓展思路的要点
- 为什么必须要设置限制?Singleton模式对实例的数量设置了限制,当存在多个实例时,实例之间相互影响,可能会产生意想不到的Bug。
- 何时生成这个唯一的实例?静态字段是类加载的过程中生成的。(类加载的过程分为5个阶段:加载、验证、准备、解析和初始化。在准备阶段正式为类变量分配内存并设置类变量初始值,引用类型为null,在初始化阶段执行类构造器<clinit>方法。)
相关的设计模式
- AbstractFactory模式(第8章)
- Builder模式(第7章)
- Facade模式(第15章)
- Prototype模式(第6章)
在以上模式中,多数情况下只会生成一个实例。
代码
- 饿汉模式
package singleton;
public class Singleton {
// 饿汉模式
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("生成了一个实例");
}
public static Singleton getInstance() {
return singleton;
}
}
- 静态内部类模式
package singleton;
public class Singleton2 {
private Singleton2() {
System.out.println("生成了一个实例");
}
// 静态内部类模式
private static class SingletonHolder {
private final static Singleton2 INSTANCE = new Singleton2();
}
public static Singleton2 getInstance() {
return SingletonHolder.INSTANCE;
}
}
注:博客中的图片来自网上。