享元模式c++代码实现
来源:互联网 发布:山东省网络问政 编辑:程序博客网 时间:2024/04/30 11:56
享元--程序中会使用到大量的对象,这些对象耗费大量的内存,这些对象有相同的
地方(内部的状态)可以共享,可以用一个简单工厂类去返回已经存在的对象,不存
在的则创建,这些对象用一个容器存放。使用对象时可以再传入外部的状态。
// flyweight.cpp : 定义控制台应用程序的入口点。//#include <iostream>#include <map>#include <string>using namespace std;class Flyweight{public://map会使用空构造Flyweight(){}Flyweight(string intrinsicState){this->intrinsicState = intrinsicState;}virtual void operation(string extrinsicState){cout << "Flyweight::operation()" << endl;}string intrinsicState;};class ConcreteFlyweight:public Flyweight{public:ConcreteFlyweight(string intrinsicState):Flyweight(intrinsicState){}void operation(string extrinsicState){cout << "intrinsicState: " << this->intrinsicState << endl;cout << "extrinsicState: " << extrinsicState << endl;}};class FlyweightFactory{public://静态成员函数要使用静态成员static FlyweightFactory *getInstance(){if(f == NULL){f = new FlyweightFactory();}return f;}Flyweight * getFlyweight(string intrinsicState){if(1 != m.count(intrinsicState)){//要使用多态,这里要放指针,放对象不行m[intrinsicState] = new ConcreteFlyweight(intrinsicState);}return m[intrinsicState];}~FlyweightFactory(){cout << "~FlyweightFactory" << endl;//new的内存要释放if(!m.empty()){map<string,Flyweight *>::iterator it = m.begin();while(it != m.end()){cout << it->first << endl;delete it->second;it++;}}/* 这个代码要注释掉,因为main中的fc与这里的f指的是相同的内存,在delete时,先调用析构函数,会释放一遍内存,完了delete还要再释放一遍if(NULL != f){delete f;f = NULL;}*/}protected:FlyweightFactory(){f = NULL;m.clear();}static FlyweightFactory *f;map<string,Flyweight*> m;};//静态成员初始化FlyweightFactory * FlyweightFactory::f = NULL;int main(){FlyweightFactory *fc = FlyweightFactory::getInstance();Flyweight *f1 = fc->getFlyweight("f1");Flyweight *f2 = fc->getFlyweight("f2");Flyweight *f3 = fc->getFlyweight("f1");f1->operation("o1");f2->operation("o2");f3->operation("o3");delete fc;return 0;}
0 0
- 享元模式c++代码实现
- 【怎样写代码】实现对象的复用 -- 享元模式(三):享元模式
- 【C++】Chapter22:享元模式
- Objective C--享元模式
- Objective C 享元模式
- C++实现享元模式
- 享元模式lua实现
- 享元模式(java实现)
- 【怎样写代码】实现对象的复用 -- 享元模式(四):享元模式与字符串
- C语言设计模式:享元模式
- C#--设计模式之享元模式
- 实现设计模式:享元模式
- 设计模式C++实现--享元模式
- 设计模式---享元模式(C++实现)
- 【怎样写代码】实现对象的复用 -- 享元模式(一):问题案例
- 【怎样写代码】实现对象的复用 -- 享元模式(二):解决方案
- 享元模式之C++实现
- 享元模式及C++实现
- CSS3动画效果大全
- 在android系统中增加物理按键或者红外遥控功能的思路
- rac安装时执行root.sh报错以后的清理
- 把应用程序移植到PowerLinux容易吗?
- PHP环境配置
- 享元模式c++代码实现
- flashplayer11+已导入JSON库
- android handler Message 的使用备忘录
- 背后黑暗
- QT实现界面跳转切换
- 常用AT指令
- 获取网站的根目录信息
- linux下的简易有道字典
- 截图工具 Snagit