【设计模式】神通广大之工厂三姐妹

           对于工厂三姐妹,大家都耳熟能详了,我再来重复一遍吧!

        三大工厂包括:简单工厂模式、工厂方法模式、抽象工厂模式。它们各有各的特征,各有各的优点,同属于创建型模式。下面看看它们都有什么拿手绝活吧!

        一、简单工厂模式

特征:又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。

应用:用来生产同一等级结构中的任意产品(不支持增加新产品)。

UML类图:


优点:实现责任分割。

弊端:当需要增加新产品时,需要修改工厂类,不符合开放封闭原则。

计算器例子:


       二、工厂方法模式

特征:工厂方法模式是针对每一种产品提供一个工厂类,通过不同的工厂实例来创建不同的产品实例。

应用:用来生产同一等级结构中的固定产品(支持增加任意产品)。

UML类图:


优点:克服简单工厂的缺点,完全支持开闭原则。保持了封装对象创建过程的优点。

弊端:每加一个一个产品,就需要加一个产品工厂的类,增加额外的开发量。

计算器例子:


        三、抽象工厂类

特征:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。

应用:抽象工厂模式是一个工厂需要生产两种或者两种以上的不同产品(对于增加新的产品,无能为力;支持增加产品族)。

UML类图:


优点:易于交换产品系列;增加新产品族,支持开闭原则;支持依赖倒转原则。

弊端:增加新的产品等级结构,不支持开闭原则。

        四、简单工厂 PK 工厂方法

        简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。不但对扩展开放了,对修改也开放了,违背了开放封闭原则

        工厂方法模式实现时,客户端需要决定实例哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是该工厂类的,现在改客户端就可以了。

         五、工厂方法 PK 抽象工厂

         工厂方法模式与抽象工厂模式的区别其实就是两句话:前者只有一个抽象产品类,而后者有多个。前者的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

         六、总结

        工厂三姐妹真的是神通广大啊,可谓是长江后浪推前浪。可是,千万不要以为抽象工厂是完美的,她有时也需要简单工厂的帮助,她们各有各的优缺点。是否能利用好她们,就要看我们的了!

        




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值