标签:使用 sp on 代码 as new 应用 设计 br
先上两段代码,区别仅在于是否涉及线程安全。
首先是不涉及多线程的单例:
public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } }
double check版的单例,线程安全:
public class Singleton {
private static volatile Singleton INSTANCE = null;
private Singleton() {}
public static Singleton getInstance() {
if(INSTANCE == null){
synchronized(Singleton.class){
if(INSTANCE == null){
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
1.单例的构造和指向单例的静态成员是私有的
2.单例的对外接口是共有的,一般是getInstance或者create之类的静态函数
3.单例成员可以在变量声明时创建,也可以在公共接口getInstance中创建,具体看应用场景
4.非多线程环境下不需要double check,不必过度使用模式
标签:使用 sp on 代码 as new 应用 设计 br
原文地址:http://www.cnblogs.com/fifila/p/4159959.html