- FlyWeight 主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题
- 采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象状态的处理(只读)。
在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价--主要指内存需求方面的代价。
运用共享技术有效地支持大量细粒度的对象。
// 通常是只读的
class Font{
private:
// unique object key
string key;
// object state
//...
public:
Font(const string& key){
//...
}
};
class FontFactory{
private:
map<string, Font*> fontPool;
public:
Font* GetFont(const string& key){
map<string, Font*>::iterator item = fontPool.find(key);
if(item != fontPool.end()){
return fontPool(key);
}
else{
Font* font = new Font(key);
fontPool[key] = font;
return font;
}
}
void clear(){
//...
}
};