天天看點

單例模式(創造型設計模式)作用懶漢模式-實作步驟餓漢模式-實作步驟缺點

設計模式指導思想:找到不同場景下,需求容易發生變化的地方,把這一部分變化的邏輯封裝起來。

創造型設計模式一共有5種:工廠模式、抽象工廠、單例模式、創造者模式、原型模式。本文我們介紹工廠模式。

作用

保證一個類在目前程序中隻存在一個執行個體。單例模式又分為懶漢模式和餓漢模式。

懶漢模式-實作步驟

  1. 建立單例單類。
  2. 把構造函數私有化,防止外部執行個體化。
  3. 建立私有屬性為目前類型。
  4. 建立單例類的公有方法,公有方法傳回目前類的執行個體。

示例:

/**
 * 在調用getInstance方法的時候才初始化lazysingleton
 * 是以稱為懶漢單例模式
 */
export class LazySingleton{
    // 私有化constructor方法,防止外部實力化對象
    private constructor(){}

    private static instance: LazySingleton

    public static getInstance(): LazySingleton{
        if(!this.instance){ // 如果是支援多線程的語言,需要加線程鎖
            return new LazySingleton()
        }
        return this.instance
    }
}
           

複制

餓漢模式-實作步驟

  1. 建立單例類。
  2. 把構造函數私有化,防止外部執行個體化。
  3. 建立私有屬性為目前類型,并執行個體化。
  4. 建立單例類的公有方法,公有方法傳回目前類的執行個體。示例:
/**
 * 在class加載時就實力化hungrysingleton對象
 * 稱為餓漢單例模式
 */
export class HungrySingleton{
    // 私有化constructor方法,防止外部實力化對象
    private constructor(){}

    private static instance: HungrySingleton = new HungrySingleton() // 如果是支援多線程的語言,需要加線程鎖

    public static getInstance(): HungrySingleton{
        return this.instance
    }
}
           

複制

缺點

  1. 違反了單一職責原則。
  2. 多線程下實作單例需要線程鎖。
  3. 多程序下實作單例,需要更複雜的處理。