Design Pattern

Chapter 5 單例模式(Singleton Pattern)

定義

單例模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

注意

  1. 要有一個私有(private)的靜態(static)方法:用來紀錄類別的實體。因為是私有的,所以外部沒辦法直接透過Singleton.instance來存取。
  2. 類別擁有一個私有的建構子:其他的方法沒辦法直接產生這個類別的實體,就是不能夠用new Singleton()這樣的方式來產生實體。
  3. 擁有一個公開取得物件實體的方法:由於是私有建構子(private constructor)的原因,要產生這個類別的實體,只能靠自己類別內的方法產生。但是又必須要讓外部能夠呼叫,所以要設定為公開的靜態方法。

程式碼

Step1

public class SingleObject {
    private static SingleObject mSingleObject = new SingleObject();
    private SingleObject(){
    }

    public static SingleObject getInstance(){
        return mSingleObject;
    }

    public void showMessage(){
        System.out.println("這就是單例模式");
    }
}

Step2

public static void main(String[] args) {
    SingleObject object = SingleObject.getInstance();
    object.showMessage();
}

Step3(Output)

這就是單例模式

優點

  1. 提供了對唯一實例的受控訪問。
  2. 由於在系統內存中只存在一個對象,因此可以節約系統資源,對於一些需要頻繁創建和銷毀的對象,單例模式可以提高系統性能。
  3. 可以基於單例模式進行擴展,使用與單例控制相似的方法來獲得指定個數的對象實例。

缺點

  1. 由於單例模式中沒有抽象層,因此擴展有很大的困難。
  2. 單例的職責過重,在一定程度上違背了“單一職責原則”。