這個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起來唷。