OOAD之單例模式Singleton的6種寫法
1 主要作用是保證在Java應用程式中,一個類Class只有一個例項存在。
一 :第一種 餓漢式(預載入)
1 public class Singleton { 2 private Singleton(){}////在自己內部定義自己一個例項,注意這是private 3 private static Singleton instance = new Singleton(); 4 5 public static Singleton getInstance() { 6 return instance; 7 } 8 9 public static void main(String[] args) { 10 Singleton sing=Singleton.getInstance(); 11 System.out.println(sing); 12 } 13 }
二:第二種 餓汗式(變種)
1 public class Singleton {
2 private Singleton (){}
3 private Singleton instance = null;
4 static {
5 instance = new Singleton();
6 }
7
8 public static Singleton getInstance() {
9 return this.instance;
10 }
11 public static void main(String[] args) {
12 Singleton sing=Singleton.getInstance();
13 System.out.println(sing);
14 }
15 }
三:第三種 懶漢式(懶載入 執行緒不安全)
1 public class Singleton { 2 private Singleton(){} 3 private static Singleton instance; 4 5 public static Singleton getInstance() { 6 if (instance == null) { 7 instance = new Singleton(); 8 } 9 return instance; 10 } 11 12 public static void main(String[] args) { 13 Singleton sing=Singleton.getInstance(); 14 System.out.println(sing); 15 } 16 }
四:第四種 懶漢式(單執行緒安全)
1 public class Singleton { 2 private Singleton(){} 3 private static Singleton instance; 4 5 public static synchronized Singleton getInstance() { 6 if (instance == null) { 7 instance = new Singleton(); 8 } 9 return instance; 10 } 11 12 public static void main(String[] args) { 13 Singleton sing=Singleton.getInstance(); 14 System.out.println(sing); 15 } 16 }
五:第五種 靜態內部類
1 public class Singleton { 2 private Singleton (){} 3 private static class SingletonHolder { 4 private static final Singleton INSTANCE = new Singleton(); 5 } 6 7 public static final Singleton getInstance() { 8 return SingletonHolder.INSTANCE; 9 } 10 //因為SingletonHolder類沒有被主動使用,只有顯示通過呼叫getInstance方法時,才會顯示裝載SingletonHolder類,從而例項化instance。 11 12 }
六:第六種 雙重校驗鎖
1 public class Singleton { 2 private volatile static Singleton instance=null; 3 private Singleton (){} 4 public static Singleton getInstance() { 5 if (instance== null) { 6 synchronized (Singleton.class) { 7 if (instance== null) { 8 instance= new Singleton(); 9 } 10 } 11 } 12 return instance; 13 } 14 }
這種方式只是在初始化Singleton那部分程式碼的時候新增同步鎖,這樣提高了效率。
相關文章
- 設計模式 - 單例模式Singleton的8種寫法設計模式單例
- Singleton——單例模式(8種)單例模式
- 單例模式的五種寫法單例模式
- 單例模式的六種寫法單例模式
- 單例模式的七種寫法單例模式
- Java:單例模式的七種寫法Java單例模式
- 單例模式(Singleton)單例模式
- 單例模式 singleton單例模式
- 設計模式之單例模式(Singleton Pattern)設計模式單例
- Python單例模式(Singleton)的N種實現Python單例模式
- 單例模式有幾種寫法?單例模式
- 單例模式(下)---聊一聊單例模式的幾種寫法單例模式
- 單例模式(下) - 聊一聊單例模式的幾種寫法單例模式
- 單例模式(下) – 聊一聊單例模式的幾種寫法單例模式
- 單例模式(Singleton Pattern)單例模式
- 單例模式你會幾種寫法?單例模式
- 設計模式—singleton(單例模式)設計模式單例
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- Singleton 單例設計模式單例設計模式
- laravel singleton 單例模式使用Laravel單例模式
- 設計模式之“物件效能模式”: Singleton 單例模式(筆記)設計模式物件單例筆記
- 孔乙己的疑問:單例模式有幾種寫法單例模式
- 單例模式的七種寫法,你都知道嗎?單例模式
- 單例的幾種寫法單例
- java設計模式-單例模式SingletonJava設計模式單例
- 面試中單例模式有幾種寫法?面試單例模式
- Singleton(單例)——物件建立型模式單例物件模式
- 設計模式--單例(Singleton Pattern)設計模式單例
- [DELPHI]單例模式(singleton) 陳省單例模式
- 單例模式的正確寫法單例模式
- PHP設計模式(四)單例模式(Singleton)PHP設計模式單例
- 《設計模式》 - 1. 單例模式( Singleton )設計模式單例
- 常用設計模式-單例模式(Singleton pattern)設計模式單例
- python3中的單例模式SingletonPython單例模式
- Python單例的一種簡單寫法Python單例
- Scala 與設計模式(一):Singleton 單例模式設計模式單例
- PHP設計模式(一)—單例模式(Singleton Pattern)PHP設計模式單例
- 面試突擊50:單例模式有幾種寫法?面試單例模式
- 深入理解 JavaScript 單例模式 (Singleton Pattern)JavaScript單例模式