問題:
我們想對所有動物進行管理,每種動物對應乙個類,他們都是繼承自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)模式
現在在大力推行節約型社會,浪費可恥,節儉光榮 在軟體系統中,有時候也會存在資源浪費的情況,例如,在計算機記憶體中儲存了多個完全相同或者非常相似的物件,如果這些物件的數量太多將導致系統執行代價過高。那麼,是否存在一種技術可以用於節約記憶體使用空間,實現對這些相同或者相似物件的共享訪問呢?答案是肯定的,...