C++设计模式学习笔记一:简单工厂模式

来源:互联网 发布:nginx安装指定配置目录 编辑:程序博客网 时间:2024/05/17 10:53

    最近在学习设计模式,很多人说《大话设计模式》比较适合入门,就拿来看看。但是,书里的代码实现全是C#的,于是想用C++实现一遍。

    简单工厂模式代码实现如下:

    Operation.h实现如下:

#pragma once#include "OperationLib.h"#include <string>using namespace std;enum OperatorEnum{ADD,SUB,MUL,DIV,UNKNOW};class OPERATIONLIB_API COperation{public:COperation(void);~COperation(void);COperation(double numA, double numB);virtual double GetResult();public:static double m_NumberA;static double m_NumberB;};class COperationAdd: public COperation{public:virtual double GetResult();};class COperationSub: public COperation{public:virtual double GetResult();};class COperationMul: public COperation{public:virtual double GetResult();};class COperationDiv: public COperation{public:virtual double GetResult();};class COperationSqr: public COperation{public:virtual double GetResult();};class COperationSqrt: public COperation{public:virtual double GetResult();};class COperationReverse: public COperation{public:virtual double GetResult();};//////////////////////////////////////////////////////////////////////////class OPERATIONLIB_API COperationFactory{public:static COperation* CreateOperation(std::string sOper);};

Operation.cpp 代码如下:

#include "StdAfx.h"#include "Operation.h"double COperation::m_NumberA = 0;double COperation::m_NumberB = 0;COperation::COperation(void){}COperation::COperation(double numA, double numB){m_NumberA = numA;m_NumberB = numB;}COperation::~COperation(void){}double COperation::GetResult(){double result = 0;return result;}double COperationAdd::GetResult(){double result = 0;result = m_NumberA + m_NumberB;return result;}double COperationSub::GetResult(){double result = 0;result = m_NumberA - m_NumberB;return result;}double COperationMul::GetResult(){double result = 0;result = m_NumberA * m_NumberB;return result;}double COperationDiv::GetResult(){double result = 0;if (0 == m_NumberB){throw m_NumberB;}result = m_NumberA / m_NumberB;return result;}//////////////////////////////////////////////////////////////////////////OperatorEnum StringToEmun(std::string strOper){if (0 == strOper.compare("+")){return ADD;}else if (0 == strOper.compare("-")){return SUB;}else if (0 == strOper.compare("*")){return MUL;}else if (0 == strOper.compare("/")){return DIV;}return UNKNOW;}COperation* COperationFactory::CreateOperation(std::string sOper){OperatorEnum enumOper = StringToEmun(sOper);COperation* oper = NULL;switch(enumOper){case ADD:{oper = new COperationAdd;break;}case SUB:{oper = new COperationSub;break;}case MUL:{oper = new COperationMul;break;}case DIV:{oper = new COperationDiv;break;}}return oper;}


OperationMain.cpp 实现如下:

// OperationMain.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <string>#include "Operation.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){try{double NumA, NumB;std::string strOper;cout<<"请输入数字A:";cin>>NumA;cout<<"请选择运算符号(+、-、*、/):";cin>>strOper;cout<<"请输入数字B:";cin>>NumB;COperation* oper = new COperation(NumA, NumB);oper = COperationFactory::CreateOperation(strOper);double result = oper->GetResult();cout<<"计算结果:"<<result<<endl;}catch (...){cout<<"输入的数据有误!"<<endl;}return 0;}


0 0
原创粉丝点击