设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)
2014-07-22 10:50
1446 查看
// OperationBase.h
//OperationBase.cpp
//OperationAdd.h
//OperationAdd.cpp
//OperationMul.h
//OperationMul.cpp
//OperationSub.h
//OperationSub.cpp
//OperationDiv.h
//OperationDiv.cpp
//CFactoryContrl.h
//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;
}
#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;
}
相关文章推荐
- 学习设计模式之结合简单工厂,策略,装饰的计算器
- 【C++深入浅出】设计模式学习之简单工厂
- HEAD_FIRST设计模式学习 ----策略模式 c++简单实现代码
- 用C++学习设计模式之 简单工厂模式
- <C/C++ 版> 设计模式 学习之 策略模式+工厂模式
- C++设计模式学习笔记一:简单工厂模式
- C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
- 设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
- 大话设计模式中简单工厂模式的计算器实例的C++代码
- <C/C++ 版> 设计模式 学习之 工厂模式 <1>
- 从代码看设计模式之----工厂模式(C++)
- 设计模式学习--组合模式,c++代码
- 设计模式学习--组合模式,c++代码
- C++设计模式学习笔记五:工厂方法模式
- c++ 设计模式之 策略模式与工厂模式结合
- java设计模式学习笔记之计算器中的简单工厂模式
- <C/C++ 版> 设计模式 学习之 工厂模式 <2>
- 设计模式学习--组合模式,c++代码
- 设计模式学习--工厂模式(C++)
- 工厂(factory)模式---C++ 设计模式之学习