1. 程式人生 > >ts學設計模式: 第一篇: 單例模式

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(): 靜態例項的存在性並例項化
複製程式碼

優點

  • 提供了對唯一例項的受控訪問

缺點

  • 由於單例模式中沒有抽象層, 不易擴充套件
  • 單例類的職責過重,在一定程度上違背了“單一職責原則”。因為單例類既充當了工廠角色,提供了工廠方法,同時又充當了產品角色,包含一些業務方法(單例的內容屬性)

參考資料