#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; }