工廠模式(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;
}
else
cout<<"除數不能爲0"<<endl;
return 0;
}
//Factory.h
#ifndef _FACTORY_H
#define _FACTORY_H
class 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;
}