c++ FlyWeight 设计模式
2017-01-23 11:47
281 查看
个人觉得:一个单例模式的工厂,永远只维护一个类的实例,谁要访问实例,工厂就返回这个实例,不会有副本。FlyWeight模式类似,一堆实例工厂,其中,每个实例都是独一无二的,且没有副本(因此隐含了工厂来管理对象的生命周期)。
参考的网络例子太多没注意内存泄漏,本人都作了完善。
如下:
参考的网络例子太多没注意内存泄漏,本人都作了完善。
如下:
#include<iostream> #include<string> #include<vector> using std::cout; using std::endl; using std::string; class Object { string mProperty; public: Object(string property) :mProperty(property) {} string getProperty() { return mProperty; } virtual void Operation(string var) = 0; virtual ~Object() {} }; class MyObject:public Object { public: MyObject(string property) :Object(property) { cout << "create:" << property << endl; } virtual void Operation(string var) { //cout << getProperty() << endl; //cout << var << endl; } virtual ~MyObject() { cout << "delete:" << getProperty() << endl; } }; class FlyWeightFactory { std::vector<Object*> objGroup; public: Object* getObj(string key) { for (auto const&obj : objGroup) { if (obj->getProperty()==key) { cout << "already exist:" << key << endl; return obj; } } Object* tempObj = new MyObject(key); objGroup.push_back(tempObj); return tempObj; } ~FlyWeightFactory() { for (auto &obj : objGroup) { if (obj) { delete obj; obj = 0; } } } }; int main() { { FlyWeightFactory factory; Object* m1 = factory.getObj("lee"); Object* m2 = factory.getObj("lucy"); Object* m3 = factory.getObj("lee"); } return 0; }
相关文章推荐
- C++ 设计模式(八) FlyWeight模式
- C++设计模式-Flyweight享元模式
- 常见设计模式的解析和实现(C++)之十三-FlyWeight模式
- c++设计模式----Flyweight(享元)
- 程序设计模式(十一) C++ 享元(Flyweight)模式
- 设计模式的解析和实现(C++)之十三-FlyWeight模式
- 常见设计模式解析和实现(C++)FlyWeight模式
- 设计模式(c++)笔记之十(Flyweight模式)
- [GoF设计模式]Flyweight模式和State模式的C++实现
- 常见设计模式解析和实现(C++)FlyWeight模式
- C++设计模式-Flyweight享元模式
- 常见设计模式解析和实现(C++)FlyWeight模式
- C++设计模式之享元模式(Flyweight)
- C++设计模式编程之Flyweight享元模式结构详解
- C++设计模式之二十一--Mediator中介者模式、Interpreter解释器模式、Flyweight享元模式、Memento备忘录模式
- C++设计模式-Flyweight享元模式
- C++设计模式之十一:Flyweight(享元)
- 设计模式flyweight的C++实现源码
- (Boolan)C++设计模式 <九> ——单例模式(Singleton)和享元模式(FlyWeight)
- 常见设计模式的解析和实现(C++)之十三-FlyWeight模式