几种单列模式的介绍
单列使用场景:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以
不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问I O和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为static的方式)。
几种单列模式写法
- 懒汉,线程不安全
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
- 懒汉,线程安全(效率低)
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
- 饿汉(无懒加载效果)
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
- 饿汉,变种(推荐)
在很多框架中,也会经常看到第四种的身影
public class Singleton {
private static Singleton instance = null;
static{
instance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
- 枚举(非常好)
public enum SingletonEnum {
//实列
ALL("0","ALL"),
GA("1","GA"),
JCY("2","JCY"),
FY("3","FY");
//字段
private String code;
private String value;
private SingletonEnum(String code, String value) {
this.code = code;
this.value = value;
}
}