创建型之工厂模式

本文深入探讨了编程中的工厂模式,包括简单工厂、工厂方法和抽象工厂。简单工厂通过switch语句创建对象,易于使用但不易扩展。工厂方法则将创建逻辑转移到独立的工厂类,遵循开闭原则。抽象工厂则用于创建相关对象家族,方便切换产品系列,但增加新对象需修改多处代码。此外,还提及了反射在消除switch语句中的应用,以降低耦合。
摘要由CSDN通过智能技术生成

编程不只是一门技术,更是一门艺术!

工厂模式

好处

  1. 解耦,将对象的创建和使用分离开,用工厂来管理对象的创建逻辑,对使用者完全透明,可以防止使用者因为创建逻辑出错而导致的错误。
  2. 减少代码的重复,如果创建一个对象非常复杂,但是很多地方都需要使用到,这样的话就会有许多重复代码,使用工厂模式可以达到将创建对象的过程封装复用的目的,减少代码的复用。
  3. 统一管理,当业务逻辑发生变化时,不需要找到所有创建该对象的地方去逐个修改,只需要在工厂里修改即可,便于维护。

简单工厂

public static Operation createOperation(String operation) {
    Operation res = null;
    switch (operation) {
        case "+":
            res = new Add();
            break;
        case "-":
            res = new Sub();
            break;
    }
    return res;
}

在这里插入图片描述

优点:工厂类中包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类,对于客户端来说隔离了对具体产品的依赖。

缺点:违背了开闭原则,当需要新增运算功能时,除了需要增加运算类(扩展),还需要在工厂类中添加case分支(修改)。

工厂方法

工厂方法是简单工厂的进一步抽象与推广。根据依赖转置原则,将工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后将原来简单工厂中的每一条case分支都转换成一个工厂类,负责生产某一个具体的类。这样当需要新增功能时,只需要只需要新增一个运算类和一个该运算对应的工厂类,并不需要修改代码,满足开闭原则。工厂方法将简单工厂中的内部判断逻辑移到了客户端,如果想要增加功能,原来是改工厂类,现在是改客户端。

在这里插入图片描述

抽象工厂

用于创建一组有关联关系的对象的工厂。

基础版本

在这里插入图片描述

好处:便于改变产品系列(对应图中1或2),只需要改变具体的工厂即可使用不同的产品系列。

缺点:当需要新增一个产品C时,不仅要增加三个类,还要对工厂接口和所有的工厂实现类进行修改,维护成本高。

反射版本

在这里插入图片描述

在这里插入图片描述

这里用反射来完成依赖注入的思想,通过字符串变量然后使用反射的技术来创建类,替换掉了 switch / if 语句。所有用简单工厂的场景都可以考虑使用反射技术来去除 switch / if 语句,解除分支判断带来的耦合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值