怎么做软文代发平台网站,做的网站怎么提交到百度上去,东莞seo关键字优化,网络舆情监测系统软件享元模式#xff08;FlyWeight Pattern#xff09;是一种结构型设计模式#xff0c;旨在减少对象创建的数量#xff0c;节省内存和提高性能。
在某些情况下#xff0c;一个项目里可能需要创建大量相似的对象#xff0c;这样对象的一部分是共享的#xff08;相同的…享元模式FlyWeight Pattern是一种结构型设计模式旨在减少对象创建的数量节省内存和提高性能。
在某些情况下一个项目里可能需要创建大量相似的对象这样对象的一部分是共享的相同的还有一部分是个性化不同的。享元模式通过共享相同数据的方式减少了对象的创建从而减少了内存的占用。
举例 比如说在一个文本编辑器里需要大量相同的文本内容但是相同的文本内容又有一些区别比如字体大小、字体颜色。这种时候就可以使用享元模式创建大量的相似对象节省内存和提高性能。
在这个例子中文本内容减少共享数据字体大小、字体颜色就是个性化定制也就是外部数据。
享元模式有两个角色对象、创建对象的工厂。
#pragma once#include iostream
#include memory
#include string
#include unordered_map// 文本对象
class Text
{
public:Text(const std::string _content): content_(_content){}// 获取文本内容void GetContent(){std::cout color_ 的 content_ std::endl;}// 个性化定制 设置文本内容的颜色void SetContentColor(const std::string _color){color_ _color;}private:std::string content_;std::string color_;
};// 文本工厂
class TextFactory
{
public:static std::shared_ptrText GetText(const std::string _text){if (text_pool_.find(_text) text_pool_.end())text_pool_[_text] std::make_sharedText(_text);return text_pool_[_text];}private:static std::unordered_mapstd::string, std::shared_ptrText text_pool_;
};std::unordered_mapstd::string, std::shared_ptrText TextFactory::text_pool_;测试
void TestFlyWeight()
{// 创建工厂std::shared_ptrTextFactory text_factory std::make_sharedTextFactory();// 创建文本对象std::shared_ptrText text1 text_factory-GetText(hello);// 个性化定制text1-SetContentColor(红色);// 使用text1-GetContent();std::shared_ptrText text2 text_factory-GetText(world);text2-SetContentColor(绿色);text2-GetContent();std::shared_ptrText text3 text_factory-GetText(hello);text3-SetContentColor(黄色);text3-GetContent();// 检查文本对象是否相同std::cout std::boolalpha;std::cout (text1 text2) std::endl; // falsestd::cout (text1 text3) std::endl; // true
}输出
红色的hello
绿色的world
黄色的hello
false
true我们可以看到text1和text2是同一个对象但是通过个性化定制我们就可以使用不同颜色的相同文本内容。
文本工厂其实可以写成单例模式这样我们不管在什么时候获取到文本对象都是同一个对象。
优点
1、减少内存使用通过共享相似对象的相同内部状态来减少内存消耗相同的对象在内存中只创建一次通过共享来重用。
2、提高性能由于重复的对象被共享可以减少创建和销毁对象的开销提高性能。
缺点
1、共享状态的限制由于具有相同内部状态的对象是共享的所以一个对象修改了自己的外部状态之后会影响到其他的共享对象。比如上述例子中我们把text1的颜色设置黄色如果我们不设置text3的颜色则它的颜色也是黄色。
2、引入共享管理由于享元模式引入了共享对象的管理机制就需要创建一个享元工厂或缓存来管理共享对象的创建和存取增加了系统的复杂性。
3、某些情况下的性能问题当需要频繁地创建和销毁共享对象时或者共享对象的数量非常庞大时共享对象管理的开销可能会超过由于共享而节约的时间。