学习C++1年的菜鸟,开始学习设计模式,学过了留下痕迹,欢迎一起谈论学习。
该模式总结:利用多态实例化不同的对象。
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
class Operate
{
public:
Operate(){}
~Operate(){}
void SetNumber1(int iNumber1){m_iNumber1 = iNumber1;}
void SetNumber2(int iNumber2){m_iNumber2 = iNumber2;}
virtual int GetResult() = 0{}
protected:
int m_iNumber1;
int m_iNumber2;
};
class OperateAdd :public Operate
{
public:
OperateAdd(){}
~OperateAdd(){}
int GetResult(){return m_iNumber1 + m_iNumber2;}
};
class OperateSubtract :public Operate
{
public:
OperateSubtract(){}
~OperateSubtract(){}
int GetResult(){return m_iNumber1 - m_iNumber2;}
};
class OperateFactory
{
public:
OperateFactory(){}
~OperateFactory(){}
static Operate* GetOperatePoint(char cOperate);
};
Operate* OperateFactory::GetOperatePoint(char cOperate)
{
Operate *pOperate = NULL;
switch (cOperate)
{
case '+':
pOperate = new OperateAdd;
break;
case '-':
pOperate = new OperateSubtract;
break;
default:
pOperate = NULL;
break;
}
return pOperate;
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化
char cOperate = ' ';
int iNumber1 = 0;
int iNumber2 = 0;
int iResult = 0;
Operate *pOperate = NULL;
//输入
cout<<"Please input number1 operate number2:"<<endl;
cin>>iNumber1>>cOperate>>iNumber2;
//计算结果
pOperate = OperateFactory::GetOperatePoint(cOperate);
pOperate->SetNumber1(iNumber1);
pOperate->SetNumber2(iNumber2);
iResult = pOperate->GetResult();
//输出
cout<<"The result :"<<iResult<<endl;
system("pause");
return 0;
}