一.是什么
單例模式是一種設(shè)計(jì)模式,它的核心思想是:整個(gè)系統(tǒng)中只能存在一個(gè)類的實(shí)例,并提供一個(gè)全局訪問點(diǎn)來獲取這個(gè)實(shí)例。
二. 有什么作用
作用 | 描述 |
---|
全局唯一性 | 避免多個(gè)實(shí)例帶來的資源浪費(fèi)或數(shù)據(jù)不一致問題 |
共享狀態(tài) | 單例中的數(shù)據(jù)可被多個(gè)組件或模塊共享 |
統(tǒng)一管理 | 管理某一類服務(wù)或工具,如緩存、日志、配置等 |
延遲初始化(惰性加載) | 實(shí)例只在首次使用時(shí)創(chuàng)建,節(jié)省資源 |
三. 怎么用
對象字面量
const Singleton = {name: '我是單例',sayHi() {console.log('Hi~', this.name);},
};
ES6 類 + 靜態(tài)屬性
class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}this.name = '我是單例';Singleton.instance = this;}sayHi() {console.log('Hi~', this.name);}
}// 使用
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true
四. 用在哪里
應(yīng)用場景 | 描述 |
---|
狀態(tài)管理 | Vuex、Redux 中的 Store 就是單例 |
緩存模塊 | 數(shù)據(jù)緩存、接口響應(yīng)緩存、資源預(yù)加載器等 |
工具類 | 日志工具、埋點(diǎn)統(tǒng)計(jì)、埋點(diǎn) SDK 管理器 |
事件總線 | 作為全局 EventBus 控制通信 |
彈窗控制 | Modal、Dialog 控制器,防止重復(fù)彈窗 |
配置中心 | 管理全局配置信息或運(yùn)行環(huán)境信息 |