c++设计模式--享元模式
2013-09-17 09:02
232 查看
享元模式(Flyweight)使用共享的方式节约内存的使用,可以支持大量细粒度的对象。它将对象的内部状态与外部状态分离,配合工厂模式(抽象工厂或工厂方法)生成仅有内部状态的小对象,工厂内部保持小对象的引用计数从而实现共享,外部状态可以通过计算得到。
GOOD:运用共享技术有效地支持大量细粒度的对象(对于C++来说就是共用一个内存块啦,对象指针指向同一个地方)。
如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销就应该考虑使用。
还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用较少的共享对象取代多组对象,此时可以考虑使用享元。
res:http://hi.baidu.com/xuehuo_0411/item/621693ce09da67d3964452e8
C++实现:
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; }
相关文章推荐
- (Boolan)C++设计模式 <九> ——单例模式(Singleton)和享元模式(FlyWeight)
- 设计模式C++实现(9)——享元模式
- 设计模式观后(c++还原之二十五 享元模式)
- 设计模式C++实现(9)——享元模式
- c++23种设计模式之享元模式
- 设计模式--享元模式实现C++
- C++设计模式-Flyweight享元模式
- C++设计模式之享元模式(FlyWeight)
- 设计模式C++实现(9)——享元模式
- C++设计模式浅识享元模式
- 设计模式C++实现(9)——享元模式
- 设计模式C++实现(9)——享元模式
- 设计模式C++实现(9)——享元模式
- 设计模式C++实现二十二:享元模式
- C++设计模式之享元模式
- 设计模式--享元模式C++实现
- C++设计模式之享元模式
- c++设计模式之享元模式
- 设计模式---享元模式(C++实现)
- 设计模式C++实现(9)——享元模式