ts學設計模式: 第一篇: 單例模式
模式定義
單例模式: 確保一個類只有一個例項, 並且提供一個全域性訪問的方法。
模式結構圖

程式碼實現
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(): 靜態例項的存在性並例項化 複製程式碼
優點
- 提供了對唯一例項的受控訪問
缺點
- 由於單例模式中沒有抽象層, 不易擴充套件
- 單例類的職責過重,在一定程度上違背了“單一職責原則”。因為單例類既充當了工廠角色,提供了工廠方法,同時又充當了產品角色,包含一些業務方法(單例的內容屬性)
參考資料
- ofollow,noindex">Design patterns in typescript 。