設計模式(五)Singleton模式
阿新 • • 發佈:2018-03-30
str pack println oba new system png single 成了
Singleton模式就是確保只生成一個實例的模式。這裏有兩個意思,即想確保任何情況下都絕對只有一個實例和想在程序上表現出“只存在一個實例”。
下面通過一個實例來說明這種設計模式。
1 package BigJunOba.bjtu.Singleton; 2 3 public class Singleton { 4 5 private static Singleton singleton = new Singleton(); 6 7 private Singleton() { 8 System.out.println("生成了一個實例");9 } 10 public static Singleton getInstance() { 11 return singleton; 12 } 13 }
Singleton類只會生成一個實例。主要方法是在聲明實例域時,使用static將singleton初始化為Singleton的示例。初始化僅僅在類被加載時進行一次。由於Singleton的構造器是private的,是因為這樣可以禁止從Singleton外部調用構造器,也就是說,不能從Singleton類以外的代碼中調用構造器new Singleton()。
1 package BigJunOba.bjtu.Singleton;2 3 public class Main { 4 5 public static void main(String[] args) { 6 System.out.println("Start."); 7 Singleton obj1 = Singleton.getInstance(); 8 Singleton obj2 = Singleton.getInstance(); 9 if(obj1 == obj2) { 10 System.out.println("是相同的示例");11 } else { 12 System.out.println("是不相同的示例"); 13 } 14 System.out.println("End."); 15 } 16 }
這裏是用來觀察是否只生成了一個實例,如果只調用了一次構造器,那麽就只會打印出一句“生成了一個實例。”
Start. 生成了一個實例 是相同的示例 End.
通過輸出結果我們可以看到,確實是只生成了一個實例。這個設計模式的關鍵就是構造器使用private來聲明。
單例模式類圖如下。
設計模式(五)Singleton模式