設計模式指導思想:找到不同場景下,需求容易發生變化的地方,把這一部分變化的邏輯封裝起來。
創造型設計模式一共有5種:工廠模式、抽象工廠、單例模式、創造者模式、原型模式。本文我們介紹工廠模式。
作用
保證一個類在目前程序中隻存在一個執行個體。單例模式又分為懶漢模式和餓漢模式。
懶漢模式-實作步驟
- 建立單例單類。
- 把構造函數私有化,防止外部執行個體化。
- 建立私有屬性為目前類型。
- 建立單例類的公有方法,公有方法傳回目前類的執行個體。
示例:
/**
* 在調用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
}
}
複制
餓漢模式-實作步驟
- 建立單例類。
- 把構造函數私有化,防止外部執行個體化。
- 建立私有屬性為目前類型,并執行個體化。
- 建立單例類的公有方法,公有方法傳回目前類的執行個體。示例:
/**
* 在class加載時就實力化hungrysingleton對象
* 稱為餓漢單例模式
*/
export class HungrySingleton{
// 私有化constructor方法,防止外部實力化對象
private constructor(){}
private static instance: HungrySingleton = new HungrySingleton() // 如果是支援多線程的語言,需要加線程鎖
public static getInstance(): HungrySingleton{
return this.instance
}
}
複制
缺點
- 違反了單一職責原則。
- 多線程下實作單例需要線程鎖。
- 多程序下實作單例,需要更複雜的處理。