#include <iostream>
#include <stdio.h>
using namespace std;
///基类存放数据,子类存放操作
class Operation
{
public:
virtual double GetResult() = 0;
double NumberA;
double NumberB;
};
class OperationAdd : public Operation
{
public:
virtual double GetResult()
{
return NumberA + NumberB;
}
};
class OperationSub : public Operation
{
public:
virtual double GetResult()
{
return NumberA - NumberB;
}
};
class OperationMul : public Operation
{
public:
virtual double GetResult()
{
return NumberA * NumberB;
}
};
///简单工厂模式的最大优点在于工厂类中包含了必要的逻辑,根据客户端的选择条件动态实例化相关的类,
///对于客户端来说,去除了与具体产品的依赖
///----------------------------------------------------------------------------------------
///定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
///工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,
///也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要添加功能,本来是改工厂类,现在是修改客户端
class IFactory
{
public:
virtual Operation* CreateOperation() = 0;
};
class AddFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperationAdd();
}
};
class SubFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperationSub();
}
};
class MulFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperationMul();
}
};
int main()
{
IFactory* operFactory = NULL;
Operation* oper = NULL;
{
operFactory = new AddFactory;
oper = operFactory->CreateOperation();
oper->NumberA = 7;
oper->NumberB = 8;
cout << oper->GetResult() << endl;
delete operFactory;
operFactory = NULL;
delete oper;
oper = NULL;
}
{
operFactory = new MulFactory;
oper = operFactory->CreateOperation();
oper->NumberA = 7;
oper->NumberB = 8;
cout << oper->GetResult() << endl;
delete operFactory;
operFactory = NULL;
delete oper;
oper = NULL;
}
return 0;
}