工厂方法模式

it2023-09-05  84

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

 

最新回复(0)