標籤:
單例模式確保某個類只有一個執行個體,而且自行執行個體化並向整個系統提供這個執行個體,單例模式有以下特點:
1、單例類只能有一個執行個體。
2、單例類必須自己自己建立自己的唯一執行個體。
3、單例類必須給所有其他對象提供這一執行個體。
單例模式分為懶漢模式和餓漢模式:
懶漢模式在程式在第一次調用執行個體化。是線程不安全的。但是可以通過改寫方法使其安全。
餓漢模式在載入時即開始執行個體化,確保在調用時已經存在了執行個體。是安全執行緒的,但是記憶體開銷似乎有點大。
懶漢式範例代碼:
1 public class Singleton { 2 //私人化預設構造器 3 private Singleton() {} 4 private static Singleton single=null; 5 //靜態Factory 方法 6 public static Singleton getInstance() { 7 if (single == null) { 8 single = new Singleton(); 9 } 10 return single; 11 } 12 }
餓漢式範例代碼:
1 public class Singleton { 2 private Singleton() {} 3 private static final Singleton single = new Singleton(); 4 public static Singleton getInstance() { 5 return single; 6 } 7 }
懶漢式安全執行緒改進,方法1:
1 public class Singleton { 2 //私人化預設構造器 3 private Singleton() {} 4 private static Singleton single=null; 5 //靜態Factory 方法(加上同步方法) 6 public static Singleton Synchronized getInstance() { 7 if (single == null) { 8 single = new Singleton(); 9 } 10 return single; 11 } 12 }
方法2:
1 public class Singleton 2 { 3 //私人化構造器 4 private Singleton(){} 5 //靜態內部類 6 private static class SingletonHoledr(){ 7 private static final Singleton instance = new Singleton(); 8 } 9 //靜態Factory 方法10 public static final Singleton getInstance(){ 11 return SingletonHoledr.instance; 12 } 13 }
一般本人比較鐘情於用方法2。關於單例模式還有很多未涉及到。本文是本人學習筆記,如果引用請謹慎。
還有如果哪位仁兄發現有錯誤的麻煩幫留個言,以便改正。
Java設計模式之單例設計模式