模式定义:
运用共享技术有效的支持大量细粒度的对象。
假设我们要设计一个字体的类,字符的量很大,我们没必要为每一个字符都创建一个字体对象。这时候可以使用享元模式(实现对象池):
class Font {
private:
//unique object key
string key;//字体的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!=footPool.end()){//已经存在
return fontPool[key];
}
else{//否则创建新的 并加入对象池
Font* font = new Font(key);
fontPool[key]= font;
return font;
}
}
void clear(){
//...
}
};