享元模式目的是為了減少物件例項化的個數,已達到減少物件占用記憶體的目的。他建立物件是通過工廠建立的,在工廠類中建立物件時,會先判斷此物件是否已經存在,如果不存在則建立物件,如果存在則返回已經存在的物件,這是享元模式的核心部分。對於物件間的不同部分,則採用引數傳遞的方式將不同部分傳進類的處理函式。
**如下:
#include
#include
#include
using
namespace
std;
class flyweight
virtual
void operation (int extrinsicstate) = 0;
};class concreteflyweight : public flyweight
};class unsharedconcreteflyweight :public flyweight
};class flyweightfactory
flyweight* getflyweight (string key)
private:
map flyweights;
};class user
string getname ()
private:
string name;
};class website
;class concretewebsite : public website
void use (user *user)
private:
string name;
};class websitefactory
int getwebsitecount ()
private:
map websites;
};int main(void)
執行結果如下:
concreteflyweight: 21
concreteflyweight: 20
concreteflyweight: 19
unsharedconcreteflyweight: 18
-----------------------
concretewebsite: noveluser: hb
concretewebsite: bolguser: zt
0x9ff8f28 0x9ff8f98
0x9ff8f28
20x804c6d6 0x804c6d6
實現享元模式的核心在websitefactory類,此類是乙個物件工廠生成類,在生成乙個物件時,它回去已經存在的物件集合websites中查詢,若找到了則直接返回,若沒有找到則new乙個新物件並返回。
希望以後可以遇到用享元模式的場景,碰見別人寫的**運用此模式的也能夠識別出來。
ps:**最後兩個相同的字串char *p1 = "world";
char *p2 = "world";列印出兩個字串的位址發現位址是一樣的,這也是享元模式的乙個應用。
《大話設計模式》讀書筆記 第26章 享元模式
1 享元模式 flyweight 運用共享技術有效地支援大量細粒度的物件。2 享元模式 flyweight 結構圖 3 內部狀態與外部狀態 在享元物件內部並且不會隨環境改變而改變的共享部分,可以稱為是享元物件的內部狀態,而隨環境改變而改變的 不可以共享的狀態就是外部狀態了。4 事實上,享元模式可以避...
大話設計模式 享元模式
享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果能發現這些例項除了幾個引數外基本上都是相同的,有時就能夠大幅度地減少需要例項化的類的數量。如果能把那些引數移到類例項的外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度地減少單個例項的數目。所有具體...
《大話設計模式 享元模式》筆記
1 享元模式 flyweight 運用共享技術有效的支援大量細顆粒度的物件。2 享元模式結構圖 3 簡單 實現 flyweight類,它是所有享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態。public abstract class flyweightconcretef...