其他分享
首页 > 其他分享> > 设计模式之享元模式

设计模式之享元模式

作者:互联网

本文参考资料

《设计模式》 gof。

1. 意图

运用共享技术有效地支持大量细粒度的对象。

2. 动机

有些应用程序得益于在其整个设计过程中采用对象技术,但简单化的实现代价极大。

3. 适用性

Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。当以下情况都成立时使用Flyweight模式:
• 一个应用程序使用了大量的对象。
• 完全由于使用大量的对象,造成很大的存储开销。
• 对象的大多数状态都可变为外部状态。
• 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
• 应用程序不依赖于对象标识。由于 Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

4.类图

对应代码:

#pragma once
#include "stdafx.h"

class FlyWeigt {
public:
	FlyWeigt() {}
	virtual ~FlyWeigt() {}
	virtual void Operation() = 0;
};
//共享部分
class ConcreteFlyweight : public FlyWeigt 
{
public:
	ConcreteFlyweight() {}
	~ConcreteFlyweight() {}
	virtual void Operation()
	{
		cout << "ConcreteFlyweight  666" << endl;
	}
};

class UnsharedFlyweight : public FlyWeigt
{
public:
	UnsharedFlyweight() {}
	~UnsharedFlyweight() {}
	virtual void Operation()
	{
		cout << "UnsharedFlyweight   666" << endl;
	}
};

//设计工厂
class FlyWeigtFactory
{
public:
	FlyWeigt* getFlyWeight(string str)
	{
		if (!flyWeight.count(str))
		{
			flyWeight[str] = new ConcreteFlyweight();
		}
		return flyWeight.at(str);
	}
private:
	map<string, FlyWeigt*> flyWeight;
};

就简单的记录到这里吧,详细的请查看对应书籍。
 

标签:享元,对象,ConcreteFlyweight,FlyWeigt,模式,virtual,Flyweight,设计模式,public
来源: https://blog.csdn.net/weixin_42126427/article/details/114834218