五、工厂模式

来源:互联网 发布:linux新建文档命令 编辑:程序博客网 时间:2024/04/26 15:26

工厂模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

//Operation.h#ifndef _OPERATION_H_#define _OPERATION_H_class Operation{public:virtual double GetResult()=0;public:double _num1,_num2;};class OperationAdd:public Operation{public:double GetResult();};class OperationSub:public Operation{public:double GetResult();};class OperationMul:public Operation{public:double GetResult();};class OperationDiv:public Operation{public:double GetResult();};#endif



//Operation.cpp#include "Operation.h"#include <iostream>#include <iostream>using namespace std;double OperationAdd::GetResult(){return _num1+_num2;}double OperationSub::GetResult(){return _num1-_num2;}double OperationMul::GetResult(){return _num1*_num2;}double OperationDiv::GetResult(){if (!_num2){return _num1/_num2;}elsecout<<"除数不能为0"<<endl;return 0;}

//Factory.h#ifndef _FACTORY_H#define _FACTORY_Hclass Operation;class OperationFactory{public:virtual Operation* CreateOperation()=0;};class AddFactory:public OperationFactory{Operation* CreateOperation();};class SubFactory:public OperationFactory{Operation* CreateOperation();};class MulFactory:public OperationFactory{Operation* CreateOperation();};class DivFactory:public OperationFactory{Operation* CreateOperation();};#endif

//Factory.cpp#include "Operation.h"#include "Factory.h"Operation* AddFactory::CreateOperation(){return new OperationAdd();}Operation* SubFactory::CreateOperation(){return new OperationSub();}Operation* MulFactory::CreateOperation(){return new OperationMul();}Operation* DivFactory::CreateOperation(){return new OperationDiv();}

//main.cpp#include <iostream>#include "Factory.h"#include "Operation.h"using namespace std;int main(){char operate;double numA;double numB;Operation* op=NULL;OperationFactory* of= NULL;cout<<"请输入数字1:";cin>>numA;cout<<"请输入运算符:";cin>>operate;cout<<"请输入数字2:";cin>>numB;switch(operate){case '+':of = new AddFactory();break;case '-':of = new SubFactory();break;case '*':of = new MulFactory();break;case '/':of = new DivFactory();break;default:cout<<"算符输入错误!"<<endl;return 0;}op = of->CreateOperation();op->_num1 = numA;op->_num2 = numB;double result = op->GetResult();cout<<result;return 0;}