设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)

来源:互联网 发布:青岛知行国际学校地址 编辑:程序博客网 时间:2024/05/21 15:44

// OperationBase.h

#pragma once#include <Windows.h>#include <iostream>using namespace std;class COperationBase{public:COperationBase();~COperationBase();public:DWORD m_dwNumberSrc;DWORD m_dwNumberDes;public:virtual float GetOperationResult();};

//OperationBase.cpp

#include "OperationBase.h"COperationBase::COperationBase(){cout<<"Constructor COperationBase"<<endl;}COperationBase::~COperationBase(){cout<<"Destructor COperationBase"<<endl;}float COperationBase::GetOperationResult(){float flResult=0;return flResult;}

//OperationAdd.h

#pragma once#include "OperationBase.h"class COperationAdd:public COperationBase{public:COperationAdd();~COperationAdd();virtual float GetOperationResult();};

//OperationAdd.cpp

#include "OperationAdd.h"COperationAdd::COperationAdd(){cout<<"Constructor COperationAdd"<<endl;}COperationAdd::~COperationAdd(){cout<<"Destructor COperationAdd"<<endl;}float COperationAdd::GetOperationResult(){float flResult=0;flResult=m_dwNumberSrc+m_dwNumberDes;return flResult;}

//OperationMul.h

#pragma once#include "OperationBase.h"class COperationMul:public COperationBase{public:COperationMul();~COperationMul();virtual float GetOperationResult();};


//OperationMul.cpp

#include "OperationMul.h"COperationMul::COperationMul(){cout<<"Constructor COperationMul"<<endl;}COperationMul::~COperationMul(){cout<<"Destructor COperationMul"<<endl;}float COperationMul::GetOperationResult(){float flResult=0;flResult=m_dwNumberSrc*m_dwNumberDes;return flResult;}

//OperationSub.h

#pragma once#include "OperationBase.h"class COperationSub:public COperationBase{public:COperationSub();~COperationSub();virtual float GetOperationResult();};


//OperationSub.cpp

#include "OperationSub.h"COperationSub::COperationSub(){cout<<"Constructor COperationSub"<<endl;}COperationSub::~COperationSub(){cout<<"Destructor COperationSub"<<endl;}float COperationSub::GetOperationResult(){float flResult=0;flResult=m_dwNumberSrc-m_dwNumberDes;return flResult;}

//OperationDiv.h
#pragma once#include "OperationBase.h"class COperationDiv:public COperationBase{public:COperationDiv();~COperationDiv();virtual float GetOperationResult();};

//OperationDiv.cpp

#include "OperationDiv.h"COperationDiv::COperationDiv(){cout<<"Constructor COperationDiv"<<endl;}COperationDiv::~COperationDiv(){cout<<"Destructor COperationDiv"<<endl;}float COperationDiv::GetOperationResult(){float flResult=0;try{flResult=m_dwNumberSrc/m_dwNumberDes;}catch (float f){cout<<"the divided should be not 0"<<endl;}return flResult;}


//CFactoryContrl.h


#include "OperationAdd.h"#include "OperationSub.h"#include "OperationMul.h"#include "OperationDiv.h"class CFactoryContrl{protected:CFactoryContrl();public:~CFactoryContrl();static COperationBase * CFactoryOperation(CHAR chOperationFlag);static CFactoryContrl * ConcreateSingleInstance();static COperationBase * cpbBase;private:static CFactoryContrl * CfcSingleInstance;};
//CFactoryContrl.cpp

#include "FactoryContrl.h"CFactoryContrl* CFactoryContrl::CfcSingleInstance=NULL;COperationBase* CFactoryContrl::cpbBase=NULL;CFactoryContrl::CFactoryContrl(){cout<<"Constructor CFactoryContrl"<<endl;}CFactoryContrl* CFactoryContrl::ConcreateSingleInstance(){if (CfcSingleInstance==NULL){CfcSingleInstance=new CFactoryContrl();}return CfcSingleInstance;} COperationBase* CFactoryContrl::CFactoryOperation(CHAR chOperationFlag){switch(chOperationFlag){case '+':cpbBase=new COperationAdd();break;case '-':cpbBase=new COperationSub();break;case '*':cpbBase=new COperationMul();break;case '/':cpbBase=new COperationDiv();break;}return cpbBase;} CFactoryContrl::~CFactoryContrl() { cout<<"Destructor CFactoryContrl"<<endl; delete cpbBase; }

//MainDemo.cpp

#include "FactoryContrl.h"int main(void){COperationBase *cobBase;CFactoryContrl *cfcFactory=CFactoryContrl::ConcreateSingleInstance();cobBase=cfcFactory->CFactoryOperation('+');cobBase->m_dwNumberSrc=100;cobBase->m_dwNumberDes=200;float flRet=cobBase->GetOperationResult();cout<<"result: "<<flRet<<endl;    cobBase=cfcFactory->CFactoryOperation('-');    cobBase->m_dwNumberSrc=200;    cobBase->m_dwNumberDes=300;    flRet=cobBase->GetOperationResult();    cout<<"result: "<<flRet<<endl;    cobBase=cfcFactory->CFactoryOperation('*');    cobBase->m_dwNumberSrc=300;    cobBase->m_dwNumberDes=400;    flRet=cobBase->GetOperationResult();    cout<<"result: "<<flRet<<endl;return 1;}



0 0
原创粉丝点击