简单工厂组合策略模式_反射
来源:互联网 发布:下列属于视频压缩算法 编辑:程序博客网 时间:2024/05/22 13:00
#include <iostream>#include <map>using namespace std;typedef void* (*CreateClass)(int,int);#define DECLARE_CLASS(className)\static CKDynamicClass *className##dc;#define IMPLEMENT_CLASS(c,className)\CKDynamicClass* className::className##dc=\new CKDynamicClass(c,className::CreateInstance);class CClassFactory{private:map<char,CreateClass> m_mapMethod;public:void* GetClassByType(char cType,int nFirst,int nSecond){map<char,CreateClass>::const_iterator iter;iter=m_mapMethod.find(cType);if(iter!=m_mapMethod.end())return iter->second(nFirst,nSecond);elsereturn NULL;}void RegisterMethod(char cType,CreateClass method){m_mapMethod.insert(pair<char,CreateClass>(cType,method));}static CClassFactory& GetInstance(){static CClassFactory classFactory;return classFactory;} };class CKDynamicClass{public:CKDynamicClass(char cType,CreateClass method){CClassFactory::GetInstance().RegisterMethod(cType,method);}};class COperation{protected:int m_nFirst;int m_nSecond;public:COperation(int nFirst,int nSecond):m_nFirst(nFirst),m_nSecond(nSecond){}virtual double GetResult()=0;};class CContext{private:COperation *m_classOper;public:CContext(char cType,int nFirst,int nSecond){m_classOper=(COperation*)CClassFactory::GetInstance().GetClassByType(cType,nFirst,nSecond);}double GetResult(){double dResult=0.0;if(m_classOper!=NULL)dResult=m_classOper->GetResult();return dResult;}};class CAddOperation:public COperation{private:DECLARE_CLASS(CAddOperation)public:CAddOperation(int nFirst,int nSecond):COperation(nFirst,nSecond){}static void* CreateInstance(int nFirst,int nSecond){return new CAddOperation(nFirst,nSecond);}virtual double GetResult(){return m_nFirst+m_nSecond;}};IMPLEMENT_CLASS('+',CAddOperation)class CSubOperation:public COperation{private:DECLARE_CLASS(CSubOperation)public:CSubOperation(int nFirst,int nSecond):COperation(nFirst,nSecond){}static void* CreateInstance(int nFirst,int nSecond){return new CSubOperation(nFirst,nSecond);}virtual double GetResult(){return m_nFirst-m_nSecond;}};IMPLEMENT_CLASS('-',CSubOperation)/********扩展***************/class CMulOperation:public COperation{private:DECLARE_CLASS(CMulOperation)public:CMulOperation(int nFirst,int nSecond):COperation(nFirst,nSecond){}static void* CreateInstance(int nFirst,int nSecond){return new CMulOperation(nFirst,nSecond);}virtual double GetResult(){return m_nFirst*m_nSecond;}};IMPLEMENT_CLASS('*',CMulOperation)/************************************/int main(void){char c;cin>>c;CContext *pContext=new CContext(c,4,3);cout<<pContext->GetResult()<<endl;system("pause");return 0;}
阅读全文
0 0
- 简单工厂组合策略模式_反射
- 策略模式+简单工厂+反射
- 设计模式_改进策略模式_策略模式与简单工厂模式结合(Java)
- 策略+简单工厂模式
- 策略模式+简单工厂
- 简单工厂模式+反射
- 简单工厂模式 & 策略模式
- 简单工厂模式&策略模式
- 策略模式 + 简单工厂模式
- 简单工厂模式 & 策略模式
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式、策略模式、策略与工厂的区别(转) 的区别(转)
- 策略模式和简单工厂+策略模式
- 简单工厂和策略模式
- 简单工厂+策略模式-上
- 简单工厂+策略模式-下
- 简单工厂与策略模式
- 策略模式和简单工厂
- 简单工厂与策略模式
- Android Resource介绍和使用(二)
- jsp 简易mvc模式
- webdriver中html节点的查找、定位
- 20170516@Map接口
- SAE 平台代码实现数据库定时备份以及同步到本地 2014/09/11 09:39:01 分类: 技术随笔 1人评论 次浏览 SAE 只允许用户通过phpMyAdmin管理远程数据库,
- 简单工厂组合策略模式_反射
- js学习笔记--基本概念
- ssh-agent参数详解
- 接口java.util.Map.Entry的使用
- 剑指offer——替换空格
- 算法导论之最优解算法--钢条切割问题扩展--流量充值问题
- 关于互联网思维与技术团队的一些总结
- VS快捷键
- Convert BST to Greater Tree