从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。[From baike.baidu.com]
/*******************************************************/
//名称:简单工厂模式(OperationFactory)
//时间:2014年4月4日11:49:21
//作者:Lynch
/*******************************************************/
#pragma once
#include"OperationFactory.h"
int main()
{
int a,b;
char oper;
while(true)
{
cout<<"Please input num1,num2,and operators(+,-,*,/,^)"<<endl;
cin>>a>>b>>oper;
OperationFactory *of=new OperationFactory(); //创建操作符工厂模式
Operation *op=of->CreateOperation(oper); //根据操作符创建对应的类
op->setNum1(a);
op->setNum2(b);
cout<<op->getResult()<<endl;
delete op;
delete of;
}
return 0;
}
#pragma once
#include"Operation.h" //基类
#include"AddOperation.h" //加法类
#include"SubOperation.h" //减法类
#include"MulOperation.h" //乘法类
#include"DivOperation.h" //除法类
#include"InvOperation.h" //乘方类
class OperationFactory
{
public:
Operation *CreateOperation(char oper)
{
Operation *op=NULL;
switch(oper)
{
case'+':
op=new AddOperation();
break;
case'-':
op=new SubOperation();
break;
case'*':
op=new MulOperation();
break;
case'/':
op=new DivOperation();
break;
case'^':
op=new InvOperation();
break;
default:
break;
}
return op;
}
};
#pragma once
#include<iostream>
using namespace std;
class Operation
{
public:
void setNum1(int num1)
{
this->num1=num1;
}
void setNum2(int num2)
{
this->num2=num2;
}
virtual int getResult()=0; //纯虚函数,不允许Operation类实例化对象
protected:
int num1;
int num2;
};
#pragma once
#include"Operation.h"
class AddOperation:public Operation
{
public:
virtual int getResult()
{
return num1+num2;
}
};
#pragma once
#include"Operation.h"
class DivOperation:public Operation
{
public:
virtual int getResult()
{
if(num2==0)
{
cerr<<"Cannot be divided by 0!"<<endl;
exit(1);
}
return num1/num2;
}
};
#pragma once
#include"Operation.h"
#include<cmath>
//involution乘方运算
class InvOperation:public Operation
{
public:
virtual int getResult()
{
return pow((double)num1,(double)num2);
}
};
#pragma once
#include"Operation.h"
class MulOperation:public Operation
{
public:
virtual int getResult()
{
return num1*num2;
}
};
#pragma once
#include"Operation.h"
class SubOperation:public Operation
{
public:
virtual int getResult()
{
return num1-num2;
}
};
代码布局:
运行效果: