概念
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!=footPool.end()){
return fontPool[key];
}else{
Font* font = new Font(key);
fontPool[key]= font;
return font;
}
}
void clear(){
//...
}
};
Flyweight 模式在大量使用一些可以被共享的对象的时候经常使用.比如,在 QQ 聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语 敷衍别人,如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight 就是基于解决这种问题的思路而 产生的,当需要一个可以在其它地方共享使用的对象的时候,先去查询是否已经 存在了同样的对象,如果没有就生成之有的话就直接使用.因此,Flyweight 模式 和 Factory 模式也经常混用.