设计模式之享元模式
作者:互联网
本文参考资料
《设计模式》 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