單例模式(singleton pattern )是一種在開發(fā)中經(jīng)常用到的設(shè)計模式。
模式定義
確保一個類僅有一個實例,并且提供一個訪問它的全局訪問點。
實現(xiàn)
1、單例模式-餓漢式
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton(){
System.out.println("new Singleton instance");
}
public static Singleton getInstance(){
return INSTANCE;
}
}
2、單例模式-懶漢式(非線程安全)
public class Singleton {
private static Singleton instance;
private Singleton() {
System.out.println("new Singleton instance");
}
//非線程安全
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
3、單例模式-懶漢式(線程安全)
public class Singleton {
private volatile static Singleton instance;
private Singleton(){
System.out.println("new Singleton instance");
}
//double-check
public static Singleton getInstance(){
if(instance==null){
synchronized (Singleton.class){
if(instance==null){
instance = new Singleton();
}
}
}
return instance;
}
}
4、單例模式-懶漢式
public class Singleton {
private Singleton(){
System.out.println("new Singleton instance");
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder{
public static final Singleton INSTANCE = new Singleton();
}
}
5、單例模式-枚舉
public enum Singleton {
INSTANCE("singleton");
private String value;
Singleton(String value){
this.value = value;
}
public void doSomeAction(){
System.out.println("doSomeAction");
}
}
源代碼
https://github.com/TiFG/design-patterns/tree/master/singleton