简单工厂模式

简单工厂模式

借用别人博客中的一段话:针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。为啥呢?如果代码是针对接口编程,那么通过多态可以与任何新类实现该接口。但是,当代码使用大量的具体类时,这就很麻烦了,就必须对代码进行改变。也就是说,你的代码并非“对修改关闭”。想用新的具体类型来扩展代码,就必须重新 打开它。

那么该怎么办呢?简单工厂模式帮我们解决了这一问题,工厂(factory)处理创建对象的细节,工厂的作用非常简单:

  • 接收信息
  • 根据接收的信息生产产品(返回需要的对象)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zyb6japJ-1583335240246)(image-20200304230102421.png)]

以上图中计算器的程序为例,我们要达到输入两个数字以及中间的运算符,输出相应的运算结果的目的,就像每个人都做过的a+b problem一样。

在开始前,我们已经写好了基类——运算类:

class Operation {

public:
    double numberA;
    double numberB;
    // 用于得到A参数
    void setNumberA(const double &numA){
        numberA = numA;
    }
    // 用于得到B参数
    void setNumberB(const double & numB){
        numberB = numB;
    }
    // 定义虚类,用于   不同运算符下的计算
    virtual double getResult(){
        double res = 0;
        return res;
    }
};

并已经完成了加减法、乘除法类中对于基类的重写(override)。

为了达到让I/O模块和运算模块分离的目的,我们声明了工厂类:

class OperationFactory{
public:
    Operation* createOperate(string operate){
        Operation* oper = nullptr;
        if(operate == "+")
            oper = new AddOperation();
        else if(operate == "-")
            oper = new SubOperation();
        else if(operate == "/")
            oper = new DivOperation();
        else if(operate == "*")
            oper = new MulOperation();
        return oper;
    }
};

可以看到,工厂类的功能非常简单即:

  • 接收表示运算符的字符串
  • 根据接收的字符串返回相应的运算类

后记:我写完这些之后听说,简单工厂类不是设计模式,心态崩了😂,简单工厂模式经常被使用,但是需要说明的是:简单工厂不是一个设计模式,同时简单工厂模式并非工厂模式(Factory Pattern),他们之间是不能画上等号的。

再提醒一次,在设计模式中,所谓的“实现一个接口”并“不一定”表示“写一个类。“实现一个接口”泛指“实现某个超类型(可以是类或接口)的某个方法”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值