单例模式的特点:
1. 单例类只能有一个实例
2. 必须自己创建自己的唯一实例
3. 必须给其他对象提供这一实例
4. 构造函数私有,防止外部对其实例化
几种实现单例模式的方式:
1 饿汉模式
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton(){
}
public static EagerSingleton getInstance(){
return instance;
}
}
package design.singleton;
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton(){
}
public static LazySingleton getInstance(){
if (instance == null){
synchronized (LazySingleton.class){
if (instance == null){
instance = new LazySingleton();
}
}
}
return instance;
}
}
3 holder
package design.singleton;
public class HoldSingleton {
private HoldSingleton(){
}
private static class SingletonHolder{
private static HoldSingleton instance = new HoldSingleton();
}
public static HoldSingleton getInstance(){
return SingletonHolder.instance;
}
}