您的位置:首页 > 编程语言

设计模式之简单工厂代码

2011-08-29 11:47 543 查看
类图:



// SimpleFactory.cpp : Defines the entry point for the console application.

//

//简单工厂模式 面向接口编程,由工厂接口做判断具体实例化哪个类,使得业务逻辑和界面逻辑分离 但是

//它违背了开闭原则

#include "stdafx.h"

#include "1.h"

#include <iostream.h>

//基类

class COperation

{

public:

int m_nFirst;

int m_nSecond;

virtual double GetResult()

{

double dResult=0;

return dResult;

}

};

//加法

class AddOperation : public COperation

{

public:

virtual double GetResult()//多态

{

return m_nFirst+m_nSecond;

}

};

//减法

class SubOperation : public COperation

{

public:

virtual double GetResult()//多态

{

return m_nFirst-m_nSecond;

}

};

//乘法

class MultiplyOperation : public COperation

{

public:

virtual double GetResult()

{

return m_nFirst*m_nSecond;

}

};

//除法

class DivideOperation : public COperation

{

public:

virtual double GetResult()

{

if (m_nSecond==0)

{

cout<<"除数不可以为零"<<endl;

// flage =1;

// cout<<"ss"<<flage<<endl;

return 'a';

}

else

return m_nFirst/m_nSecond;

}

};

//工厂类

class CCalculatorFactory//判断实例化哪个类

{

public:

static COperation* Create(char cOperator);

};

COperation* CCalculatorFactory::Create(char cOperator)

{

COperation *oper=NULL;

//在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??

switch (cOperator)

{

case '+':

cout<<"加法运算"<<endl;

oper=new AddOperation();

break;

case '-':

oper=new SubOperation();

cout<<"减法运算"<<endl;

break;

case '*':

cout<<"乘法运算"<<endl;

oper=new MultiplyOperation();

break;

case '/':

cout<<"除法运算"<<endl;

oper=new DivideOperation();

break;

default:

oper=new AddOperation();

break;

}

return oper;

}

//客户端

int main()

{

int a,b;

char c;

cin>>a>>c>>b;

COperation * op=CCalculatorFactory::Create(c);

op->m_nFirst=a;

op->m_nSecond=b;

if(b==0)

{

cout<<"please input the right number!"<<endl;

}

else cout<<op->GetResult()<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: