单例设计模式
一、饿汉式
1、私有化该类的构造器:避免在类外创建对象
2、因为构造器私有化,所以在该类内部创建该类对象
3、声明public、static的返回该类的对象的方法,来让外部类调用这个对象
4、因为无法在外部创建该类的对象,所以这个公共方法必须是静态的,不能是实例方法。而因为这个公共方法是静态的,方法里面不可用非静态结构,所以返回的该类的对象需要是static的。
public class Singleton_hungry {
//构造器私有化
private Singleton_hungry(){}
//直接创建对象
private static Singleton_hungry instance = new Singleton_hungry();
public static Singleton_hungry getInstance(){
return instance;
}
}
二、懒汉式
1、私有化该类的构造器
2、声明当前类对象,没有初始化
3、提供公共方法,返回该类的对象
4、存在线程安全问题,可以用双检索来避免线程安全问题
public class Singleton_lazy {
private Singleton_lazy(){}
private volatile static Singleton_lazy instance = null;
//双检锁/双重校验锁(DCL,即 double-checked locking)保证线程安全
public static Singleton_lazy getInstance() {
if(instance==null){
synchronized (Singleton_lazy.class){
if(instance==null){
instance = new Singleton_lazy();
}
}
}
return instance;
}
}