單例模式

📢 本文由 gemini-2.5-flash 翻譯

Singleton Pattern 物件建立型模式

目的

確保一個類別僅有一個實例,並提供一個存取它的全域存取點

結構

image

其中:

  • Singleton 指定一個 Instance 操作,允許客戶端存取它的唯一實例
  • Instance 是一個類別操作;可能負責建立它自己的唯一實例

適用時機

Singleton 模式適用於:

  • 當類別只能有一個實例而且客戶端可以從一個眾所皆知的存取點存取它時
  • 當這個唯一實例應該是透過子類別化可擴展的,而且客戶端無須變更程式碼就能使用一個擴展的實例時

範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class main{
    // s1 和 s2 是同一個實例 (位址相同)
    Singleton s1 = Singleton.getInstance();
    Singleton s2 = Singleton.getInstance();
}

class Singleton{
    private int num = 2023;

    public void setNum(int num){
        this.num = num;
    }
    public int getNum(){
        return this.num;
    }

    private Singleton(){}

    private static Singleton instance = new Singleton();

    public static Singleton getInstance(){
        return instance;
    }
}