1、单例模式是怎样产生的?
当想要让一个定义类只能实例化一个对象,则不能对外提供public的构造方法,而是要把构造方法定义为private的,这样就可以让定义类自己控制类的实例化。同时,也要对外提供一个public的方法,用来得到定义类的实例。当然,在定义类的内部需要初始化来创建自身的一个实例(保证这个实例必须是唯一的)。
2、单例模式中,需要做哪些工作?
由1所述的来一步一步分析:在一个类(Singleton)中,首先保证构造方法是private的,private Singleton(){};
其次,通过初始化来创建实例,在类中声明一个静态的引用(这个静态引用只在类加载的时候初始化一次),private static Singleton singleton= null; ,然后通过一个静态代码块来得到一个唯一的实例(如果引用singleton为null就创建一个实例,如果不是null,则不做任何处理,也就是沿用已经存在的实例),
static {
if(singleton == null) {
singleton = new Singleton();
}
}
;
再次,我们就要对外提供一个方法来访问类的唯一实例(这个方法必须是静态的,否则外部没法访问这个方法),
public static Singleton getInstance() {
return singleton;
}
这样就完成了单例模式的工作。
3、根据以上两点,总结运用单例模式的步骤。
一、私有构造方法;
二、声明一个静态的,私有的引用;
三、静态初始化一个实例,保证这个实例唯一;
四、对外提供静态方法,用以访问唯一实例。
代码表现如下:
public class Singleton {
private Singleton(){}; //第一步
private static Singleton singleton= null; //第二步
static { //第三步
if(singleton == null) {
singleton = new Singleton();
}
}
public static Singleton getInstance() { //第四步
return singleton;
}
}