深入淺出設計模式(Design Pattern)-單例模式(5-Singleton-Pattern)

Ben
生活的各種可能性
Jan 29, 2024
photo by marianne bos

這個1是不是很有意境,沒錯,這邊就是要來講只會有一個實例的單例模式(Singleton Pattern)。

單例模式(Singleton Pattern)

定義:可以確保一個類別只有一個實例,並且提供一個全域接觸點。

我們直接來看看範例:

class Singleton {
// 宣告一個靜態的唯一實例變數 = 自己
private static uniqueInstance: Singleton;

// 將建構式宣告為私有,代表不能在外部使用new關鍵字
private constructor() {};

// 創造一個靜態方法來產生唯一實例:當自己還沒被初始化就初始化自己,如果已初始化就return初始化後的自己實例
public static getInstance(): Singleton {
if (this.uniqueInstance === null || this.uniqueInstance === undefined) {
this.uniqueInstance = new Singleton();
}

return this.uniqueInstance;
}
}

// 產生唯一的實例
const singleTonExample = Singleton.getInstance();
console.log(singleTonExample);

在單例模式中,我們會將建構式宣告為私有的,這代表著我們無法在外部使用new關鍵字去實體化這個類別,這同時也代表著一件事情,只有它自己才能實例化它自己。

而在類別中有提供一個被宣告為static的getInstance的方法,我們可以用它來實例化這個類別並回傳它的實例。

而在上方的例子中,如果我們用不到這個實例,它就不會被建立,這是一種惰性(lazy)實例化。而如果它已經被建立過,它就會回傳被建立的唯一自己實例。

我們讓一個類別自行管理它自己的一個實例,同時我們也防止任何的其他類別自行建立新實例,且提供一個全域接觸點,這樣我們就能確保它是唯一的。

重點提示

接下來我們來看看這個章節中重要的重點提示:

  • 單例模式可以確保應用程式的某個類別最多只有一個實例。
  • 單例模式也提供那個實例的全域接觸點。

結語

單例模式的概念和實作方式真的蠻特別的,它也是這本書裡面較容易理解和簡單的模式,但是在使用它的時候也有很多必須要注意的地方,例如說情境或是實作的方式。

下一篇要介紹:命令模式(Command Pattern)

這篇就到這邊瞜,如果有任何問題歡迎留言給我,喜歡的話也別忘了clap起來唷。

--

--