享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
github源码路径:https://github.com/dangwei-90/Design-Mode
// 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // // 参考大话设计模式 - 享元模式 #include <iostream> #include <vector> #ifndef SAFE_DELETE #define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} } #endif using namespace std; // 方法接口 抽象类 class Flyweight { public: virtual void Operation(int num) = 0; }; // 可共用的方法实现 class ConreteFlyweight : public Flyweight { public: void Operation(int num) { cout << "flyweight , num: " << num << endl; } }; // 不可共用的方法实现 class UnsharedConreteFlyweight : public Flyweight { public: void Operation(int num) { cout << "unshared flyweight , num: " << num << endl; } }; class FlyweightFactory { public: FlyweightFactory() { // 写法不好,不易内存管理 flyweight_.push_back(new ConreteFlyweight()); } ~FlyweightFactory() { for (auto it = flyweight_.begin(); it != flyweight_.end(); it++) { SAFE_DELETE(*it); } flyweight_.clear(); } Flyweight* GetFlyweight() { vector<Flyweight*>::iterator p = flyweight_.begin(); return *p; } private: vector<Flyweight*> flyweight_; }; int main() { FlyweightFactory* flyweight_factory = new FlyweightFactory(); Flyweight* concrete_flyweight = flyweight_factory->GetFlyweight(); concrete_flyweight->Operation(12); Flyweight* concrete_flyweight_2 = flyweight_factory->GetFlyweight(); concrete_flyweight_2->Operation(13); UnsharedConreteFlyweight* unshared_concrete_flyweight = new UnsharedConreteFlyweight(); unshared_concrete_flyweight->Operation(16); SAFE_DELETE(unshared_concrete_flyweight); SAFE_DELETE(flyweight_factory); return 0; }