C++设计模式——工厂方法

 

 

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

与简单工厂模式对比
简单工厂模式最大优点就是工厂类中包含了必要的逻辑判断可以根据不同条件动态实例化相关的类, 但如果要增加新的需求就需要改动这个工厂类,违背了开放-封闭原则
工厂方法模式克服了这个缺点,在增加功能时,不需要改动原有的工厂类,但缺点是每增加新功能就需要增加新的类,增加了开发量。

使用场景
有几个不同的类,且这几个类有共同的父类
在不同的条件下用这几个类创造不同的对象;
新增功能时,不想改动原有的类

 

 

 

工厂方法:

#include<cstdio>

class Operator // 抽象类-计算器类
{
public:
    virtual void GetResult() = 0;
    void SetNumA(double numA)
    {
        a = numA;
    }
    void SetNumB(double numB)
    {
        b = numB;
    }
protected:
    double a, b;
};

class OperatorAdd : public Operator //加法器类,继承计算器类
{
public:
    void GetResult()
    {
        printf("a+b=%lf\n", a + b);
    }
};

class OperatorSub : public Operator // 减法器类,继承计算器类
{
public:
    void GetResult()
    {
        printf("a-b=%lf\n", a - b);
    }
};

class IFactory  // 工厂类
{
public:
    virtual Operator* CreateOperator() = 0;
};

class AddFactory : public IFactory
{
    Operator* CreateOperator()
    {
        return new OperatorAdd();
    }
};

class SubFactory : public IFactory
{
    Operator* CreateOperator()
    {
        return new OperatorSub();
    }
};

int main()
{
    IFactory* operFactory = new AddFactory();
    Operator* oper = operFactory->CreateOperator();
    oper->SetNumA(1.1);
    oper->SetNumB(2.2);
    oper->GetResult();

    return 0;
}

 

 

 

posted @ 2022-02-23 11:58  冰糖葫芦很乖  阅读(470)  评论(0编辑  收藏  举报