一、簡單介紹
享元模式的核心是運用共享技術來有效支持大量細粒度的對象。享元模式要求將對象的屬性劃分爲內部屬性和外部屬性,它的目標是儘可能減少共享對象的數量。一般來說,內部屬性可以被一些對象共享,外部屬性取決於具體的場景,通常不會改變,根據各自的場景而變化,不能被共享。
二、使用場景
如果需要創建大量類似的對象,那麼就可以使用享元模式了。我們將內部屬性相同的對象指定爲同一個共享的對象,把外部屬性從對象身上剝離,從而減少創建的對象的數量。通常來說,內部狀態有多少種組合,系統中便最多存在多少個對象。
三、示例
假設我們有100個人,每個人有名字和性別,然後這些人男性打籃球,打遊戲,女性化妝,逛街。
這個時候,可以用享元模式來分別構建男、女兩個對象,而不是創建100個人的實例。
class Person {
constructor(male, nameList) {
this.male = male;
this.nameList = nameList;
}
playGame() {
if (this.male === "female") return;
//...
}
playBasketball() {
if (this.male === "female") return;
//...
}
windowShop() {
if (this.male === "male") return;
//...
}
dressing() {
if (this.male === "male") return;
//...
}
}
享元模式的核心就是,通過剝離外部屬性和內部屬性,達到減少創建對象的數量的目的。