设计模式之工厂模式结合单例模式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
- 设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)
- 设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
- 设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
- 设计模式之单例模式(代码)
- 从代码看设计模式之----工厂模式(C++)
- 设计模式之工厂模式代码示例
- 设计模式之简单工厂模式学习案例代码
- 设计模式之 单例模式demo
- 设计模式学习1----工厂模式(计算器)
- 学习设计模式之结合简单工厂,策略,装饰的计算器
- PHP 单例模式 工厂模式 策略模式代码理解
- 设计模式之工厂模式之单例模式
- 基本设计模式:单例模式和工厂模式代码实现
- 代码设计模式之单例模式(Singleton)
- PHP设计模式之单例模式简单代码介绍
- php设计模式之单例模式代码
- 设计模式之单例模式(C++代码实现)
- 设计模式之工厂模式(设计之道代码理解)
- [搜索] POJ 3984 迷宫问题
- 经纬财富:广州现货白银操作建议
- java接口例子
- 关于 switch 函数的用法,新手求教
- 温州现最美星河
- 设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)
- KMP 模式匹配算法
- hdu 1686 Oulipo(KMP)
- 基于AT91SAM9G10(AT91SAM9261)与FPGA的高精度数据采集系统
- HDUJ 2052 Picture 模拟
- Cocos2d-x 3.0final win7+vs2013+adt+ndk环境搭建
- sort和qsort
- VirtualBox 更改主机和虚拟机之间的鼠标切换热键
- linux启动流程----摘至鸟哥的linux私房菜