C++实现享元模式

简单的享元模式。

1. 情景与意图

  假设我们每次去写作业的时候,都去买一支笔,那么文具盒总会有撑爆的一天。另外常量字符串我们都知道在创建后,及时生命周期结束,也并不会立即被销毁,而是还是存在内存中,当下次使用的时候,直接拿到就可以。
  在日常开发中,如果我们在使用某些细腻度较高的对象时候,都去创建,内存总会有还没有及时销毁的对象,但是依旧占着内存。因此我们需要一种设计来解决这个问题。

2. 享元模式

  运用共享技术有效地支持大量细粒度的对象。主要用于减少创建对象的数量,以减少内存占用和提高性能。
  下面用一个简单的图片存储来实现一下享元模式。

3. 图片id

  场景就是:当我们已经创建过一张图片了,就不再创建,需要使用该图片的时候直接使用,如果没有,此时我们创建一张图片。
  首先我们创建图片类:

class DPImage {
	std::string _imageMessage;
public:
	DPImage(std::string message = std::string(""));
	void showMessage();
};

然后创建图片管理类:

// .h
#include "DPImage.h"
#include <unordered_map>
class DPImageManager {
	std::unordered_map<std::string, DPImage> _imageMap;
public:
	DPImageManager();
	DPImage getImage(std::string imageID);
};

// .cpp
// 细节实现
DPImage DPImageManager::getImage(std::string imageID) {
	std::unordered_map<std::string, DPImage>::iterator item = _imageMap.find(imageID);
	// 此时我们没有创建过该图片
	if (item == _imageMap.end()) {
		_imageMap[imageID] = DPImage(imageID);
	}
	return _imageMap[imageID];
}

最后使用一下:

int main() {
	DPImage image = DPImageManager().getImage(std::string("风景"));
	image.showMessage();
	return 0;
}

4. 大总结

  享元模式和单例模式在理解上都是比较简单的,在日常开发中用的也是比较多的。它们都属于一类——“对象性能”模式。
  面向对象的开发方式带来了抽象的好处,但是在某些情况下也付出了相应的创建对象或者性能相关代价,享元模式与单例模式在对象性能方面表现的更为强烈,降低了该方面的影响、

享元模式代码:【享元模式代码】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值