三大工厂模式对比

(1)简单工厂
                       
                                             图 1 简单工厂类图


     简单工厂类优点:工厂类中包含了必要的逻辑判断,根据客户端的选择动态实例化相关类(即将逻辑判断转移到了工厂内部,而非在客户端),分离客户端和具体产品,实现松耦合。
     缺点:违背了封闭-开放原则。当需要增加新的实例类型时,必须修改原有类(在工厂类中增加case逻辑条件),这同时对修改也开放了。


(2) 工厂方法
 
                                                        图2  工厂方法 结构图

                工厂方法优点:克服了简单工厂的缺点,保持了封装对象的创建过程的优点。让类的实例化延迟到了子类工厂中。
          缺点:每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量,且逻辑判断转移到了客户端(客户端创建工厂)


(3) 抽象工厂
                      
                                                 图3 抽象工厂结构图


              抽象工厂优点:便于交换产品系列,一个具体工厂累只要在初始化的时候出现一次,只需要改变具体共产就可以使用不同的产品配置。将创建实例的过程和客户端分离,客户端通过操纵接口操作实例。
        缺点:当新增加一种产品时,需要增加对应的抽象产品类,以及对应工厂创建的类,和对应的抽象工厂类和具体工厂类,



 总结: 三大工厂类均是用于创建实例产品,目的是为了松耦合(客户端和具体产品)。
            简单工厂模式将逻辑判断转移到了简单工厂类中,初步实现松耦合,但违背了开放封闭原则。
            工厂方法模式保留了客户端与具体产品的松耦合,定义了一个用于创建一系列产品的接口,将产品的创建过程延迟到了子类工厂中。但是,工厂方法的运用,使得增加具体产品时,必须要增加对应的用于创建产品的工厂类,使得开发成本增加。
            抽象工厂模式使得产品交换方便快捷(例如整个系统的数据库),但和工厂方法一样,当新增加产品时,需要增加对应抽象产品类,抽象工厂类。



思考: 是否可以使用简单工厂和抽象工厂结合的方法,在简单工厂类中判断产品类型(如数据库类型),并创建对应的具体产品,返回客户端抽象产品类型。
结论:简单工厂带来了其缺点(违反封闭原则),但对客户端来说,使用的全部是产品的抽象,且逻辑判断在于简单工厂类中,实现了解耦。



终极解决思路:反射+配置文件+抽象工厂。
使用反射读取指定位置配置文件,配置数据库类型,再用抽象工厂,使用反射创建对应类型的产品实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值