c++设计模式-享元模式(Flyweight)

近期总结: 最近惰性很强,项目写的也很差,博客也没有按时更新,觉得自己碌碌无为还安慰自己平凡可贵,接下来要好好整理一下最近复习和学到的知识

享元模式

一.我们为什么需要享元模式?

我们每学习一种新的设计模式,首先要明白这个模式可以干什么?该如何使用这种设计模式?

所谓的享元模式主要是用了减少创建对象的数量,用来减少内存的占用和提高性能,总而言之就是你的程序有很多大量的对象,而且可能会造成内存溢出,甚至创建和消耗对象会成为一种负担,我们可以把其中共同的部分抽象出来,如果有相同的业务需求,直接返回在内存中已经有的对象,避免重复创建

为了减少内存方面的需求

二.我们如何设计享元模式?

当我们需要设计享元模式的时候,需要在内存中和其中一个东西进行对应,唯一的id进行标示,例如我们在c++中通常可以使用一个hash_map来进行处理,不过同时提高了系统的复杂度,需要分离出来外部的状态和内部状态

使用场景:大大减少了对象的创建,让效率进行提高

下面来举一个栗子

class Font{
	private:
		string key;
	public:
		Font (const string & key){
		}
};

class FontFactroy{
private:

	std::unordered_map<String,Font * > fontPool;
public:
	Font * GetFont(const string & key) { 
		auto && it = fontPool.find(key);
		if(it!=footPool.end()){
				return fontPool[key];
		}
		else {
				Font * font  = new Font(key);
				fontPool[key] = font;
				return font;
		}

类似于对象池的概念,数据结构可以使用不同,使用共享的方式,有则返回,没有则创建之后进行添加

运用共享技术来支持大量细粒度的对象 进行减少的消耗

三.什么时候使用享元

对于项目的创建进行评估,使用这个对象最好是只读,不要经过修改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值