設計模式之十 FlyWeight 享元

2021-06-10 10:16:06 字數 1489 閱讀 3024

問題:

我們想對所有動物進行管理,每種動物對應乙個類,他們都是繼承自animal

。如果我們對每乙個動物都生成乙個例項,那麼這數量是非常龐大了,我們需要想乙個比較不錯的方法

解決方案:

我們可以為每一類動物建立乙個物件,讓這個物件持有這類動物的固定屬性,對於需要變化的因素,我們可以通過引數傳進來,進行處理;這樣我們就不必建立大量的物件;這就死flyweight

模式;

源**:

#include 

#include 

#include 

using namespace std;

class flyweight

virtual void operator(const string& str)=0;

string getintrinsicstate()

protected:

flyweight(const string  &key);//只宣告,不實現,則客戶端永遠不能例項化

private:

string intrinsicstate;

class concreateflyweight:public flyweight

virtual void operator(const string &extrinsic)

cout<<"外部狀態:

"<

class flyweightfactory

public:

flyweightfactory(){}

~flyweightfactory(){}

flyweight *getflyweight(const string&key)

vector::iterator ite=flyweight.begin();

while(ite!=flyweight.end())

if ((*ite)->getintrinsicstate()==key)//找到了就返回

return (*ite);

ite++;

flyweight *fw=new concreateflyweight(key);//找不到,就建立乙個返回

flyweight.push_back(fw);

return fw;

private:

vectorflyweight;

void main()

flyweightfactory *factory=new flyweightfactory();

flyweight  *f1=factory->getflyweight("say");

flyweight  *f2=factory->getflyweight("hello");

flyweight  *f3=factory->getflyweight("say");

f1->operator("byebye");

f2->operator("byebye");

f3->operator("byebye");

設計模式之Flyweight模式(筆記)

享元模式 運用共享技術有效地支援大量細粒度的物件。適用場合 假設乙個應用程式適用了大量的物件。而大量的這些物件造成了非常大的儲存開銷時就應該考慮使用。首先定義乙個iflyweight介面 public inte ce iflyweight 接著定義乙個concreteflyweight繼承iflyw...

FlyWeight設計模式

先做個比方 乙個停車場有1000輛車子,每輛車子都是乙個物件,每個物件例項占用記憶體0.1m,那麼總共點用100m 如果數量再多些10000,100000.系統記憶體很容易消耗完.我們可以看出這麼車子有很多是相同的,那麼是否可以用共享的方式來減少例項的數量呢?答案是肯定的,於是flyweight方式...

設計模式之享元(flyweight)模式

現在在大力推行節約型社會,浪費可恥,節儉光榮 在軟體系統中,有時候也會存在資源浪費的情況,例如,在計算機記憶體中儲存了多個完全相同或者非常相似的物件,如果這些物件的數量太多將導致系統執行代價過高。那麼,是否存在一種技術可以用於節約記憶體使用空間,實現對這些相同或者相似物件的共享訪問呢?答案是肯定的,...