设计模式之享元模式(Flyweight)

概念
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 模式也经常混用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值