ts學設計模式: 第一篇: 單例模式
阿新 • • 發佈:2018-12-03
模式定義
單例模式: 確保一個類只有一個例項, 並且提供一個全域性訪問的方法, 屬於建立型模式。
模式結構圖
程式碼實現
namespace SingletonPattern {
export class Singleton {
private static singleton: Singleton;
private constructor () {
}
public static getInstance () {
if (Singleton.singleton === null) {
Singleton.singleton = new Singleton();
}
return Singleton.singleton;
}
}
}
複製程式碼
測試程式碼:
/// <reference path="Singleton.ts" />
var s1 = SingletonPattern.Singleton.getInstance();
var s2 = SingletonPattern.Singleton.getInstance();
if (s1 === s2) {
console.log('兩個例項相等');
}
else {
console.log('兩個例項不等');
}
複製程式碼
關於名稱空間這裡大致解釋下:
ts的名稱空間可以把程式碼包裹起來,通過export 關鍵字進行對外暴露被訪問的物件。
在名稱空間外部需要通過"完全限定名"來訪問暴露的物件。
通過reference註釋引用名稱空間,即可通過“完全限定名”進行訪問。
相同的名稱空間可以宣告在不同的檔案中。
複製程式碼
模式分析
單例模式的目的: 確保只有一個類的例項出現, 並提供一個全域性訪問的方法。
組成:
- 私有構造方法, 確保使用者無法通過new來建立例項
- 靜態私有成員變數singleton儲存唯一的例項
- 靜態公有方法getInstance(): 靜態例項的存在性並例項化
複製程式碼
優點
- 提供了對唯一例項的受控訪問
缺點
- 由於單例模式中沒有抽象層, 不易擴充套件
- 單例類的職責過重,在一定程度上違背了“單一職責原則”。因為單例類既充當了工廠角色,提供了工廠方法,同時又充當了產品角色,包含一些業務方法(單例的內容屬性)
參考資料