您的位置:首页 > 编程语言 > C语言/C++

c++设计模式--享元模式

2013-09-17 09:02 232 查看
享元模式(Flyweight)使用共享的方式节约内存的使用,可以支持大量细粒度的对象。它将对象的内部状态与外部状态分离,配合工厂模式(抽象工厂或工厂方法)生成仅有内部状态的小对象,工厂内部保持小对象的引用计数从而实现共享,外部状态可以通过计算得到。

GOOD:运用共享技术有效地支持大量细粒度的对象(对于C++来说就是共用一个内存块啦,对象指针指向同一个地方)。

如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销就应该考虑使用。

还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用较少的共享对象取代多组对象,此时可以考虑使用享元。

res:http://hi.baidu.com/xuehuo_0411/item/621693ce09da67d3964452e8

C++实现:

#include <iostream>

#include <vector>

#include <string>

using namespace std;

// 抽象的网站

class WebSite

{

public:

virtual void Use() = 0;

};

// 具体的共享网站

class ConcreteWebSite : public WebSite

{

public:

ConcreteWebSite(string strName) { name = strName; }

virtual void Use() { cout << "共享的网站:" << name << endl; }

private:

string name;

};

// 不共享的网站

class UnSharedWebSite : public WebSite

{

public:

UnSharedWebSite(string strName) { name = strName; }

virtual void Use() { cout << "不共享的网站:" << name << endl; }

private:

string name;

};

// 网站工厂类,用于存放共享的WebSite对象

class WebSiteFactory

{

public:

WebSiteFactory() { websites.push_back(new ConcreteWebSite("测试")); }

WebSite* GetWeb() { return *websites.begin(); }

private:

vector<WebSite*> websites;

};

int main(int argc, char* argv[])

{

WebSiteFactory* factory = new WebSiteFactory();

WebSite* web = factory->GetWeb();

web->Use();

WebSite* web2 = factory->GetWeb();

web2->Use();

// 不共享的类

WebSite* unsharedweb = new UnSharedWebSite("测试");

unsharedweb->Use();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: