最近在學習設計模式,又正好剛上手了typescript,就想要用ts實現一下試試。
單例模式的目的是限制一個類只能被實例化一次,提供一個全局的訪問點。單例模式又被分為懶漢單例模式和餓漢單例模式,懶漢單例模式就是在第一次調用時實例化,餓漢單例模式是類加載時就實例化。
核心要點:
把一個靜態私有變量確立為唯一的實例,外部通過靜態方法訪問這個唯一的實例,並把構造函數設為私有。
懶漢單例模式
class PeopleSingle {
/**核心 - 一個接收實例的靜態成員 */
private static people: PeopleSingle;
private name: string;
/**核心 - 私有構造函數 */
private constructor(name: string) {
this.name = name;
}
/**核心 - 獲取實例 */
public static getInstance(): PeopleSingle {
if (this.people == null) {
this.people = new PeopleSingle('金閃閃');
}
return PeopleSingle.people;
}
public say(): void {
console.log(`I'm ${this.name}.`);
}
}
測試
let people = PeopleSingle.getInstance();
people.say();
餓漢單例模式
class PeopleSingle {
/**核心 - 一個接收實例的靜態成員,直接創建好實例 */
private static people: PeopleSingle = new PeopleSingle('金閃閃');
private name: string;
/**核心 - 私有構造函數 */
private constructor(name: string) {
this.name = name;
}
/**核心 - 獲取實例 */
public static getInstance(): PeopleSingle {
return PeopleSingle.people;
}
public say(): void {
console.log(`I'm ${this.name}.`);
}
}
測試
let people = PeopleSingle.getInstance();
people.say();
舉的例子不是特別好,但是意思是這個意思。
