1. 程式人生 > >設計模式(五)Singleton模式

設計模式(五)Singleton模式

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模式