-
什麼是單例模式
因進程需要,有時我們只需要某個類同時保留一個對象,不希望有更多對象,此時,我們則應考慮單例模式的設計。 -
單例模式的特點
1、單例模式只能有一個實例。
2、單例類必須創建自己的唯一實例
3、單例類必須向其他對象提供這一實例。 -
單例模式的實現
- 懶漢式(線程不安全)
public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){ } public static SingletonDemo getInstance(){ if(instance==null){ instance=new SingletonDemo(); } return instance; } }
- 懶漢式,線程安全
public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){ } public static synchronized SingletonDemo getInstance(){ if(instance==null){ instance=new SingletonDemo(); } return instance; } }
這種模式在多線程的時候效率比較低,生產上不推薦.
- 餓漢式,線程安全
public class SingletonDemo { private static SingletonDemo instance=new SingletonDemo(); private SingletonDemo(){ } public static SingletonDemo getInstance(){ return instance; } }
- 靜態內部類(線程安全)
public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){ return SingletonHolder.instance; } }
- 枚舉方法(線程安全)
enum SingletonDemo{ INSTANCE; public void otherMethods(){ System.out.println("Something"); } }
- 雙重校驗(線程安全)
public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){ if(instance==null){ synchronized (SingletonDemo.class){ if(instance==null){ instance=new SingletonDemo(); } } } return instance; } }
java單例模式幾種常見實現方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.