工厂模式精髓

2018-07-14  本文已影响13人  理想是一盏灯

工厂模式分类

业界一般把工厂模式细分为三种:由简单到复杂分别为简单工厂模式、工厂模式、抽象工厂模式。


三种工厂模式的共同点

  所有这三种工厂模式都是对象的创建型模式,都对所有用到该对象的创建,也就是实例化进行统一管理,这些对象往往是相关对象或者对象的创建比较复杂,根据需求不同而不同,这样的好处可以避免当业务变得复杂时,比如新增了一个同类型的其他产品时,所有创建该类型产品类对象的地方都要改一遍(比如在原来的判断分支上新增一个对于新加入对象的类型识别判断,并赋值),另外的好处是屏蔽客户端创建对象的复杂性。这些都可以在工厂中进行处理,对用户透明,只返回符合要求的对象给客户端。


简单工厂模式特点

  对于不同产品对象的创建,只有一个工厂,根据产品类型的不同来创建不同的产品对象。产品类型客户端传入,类型可以是唯一标识每个产品的值

优点

  类少,逻辑比较简单

缺点

  每增加一个产品对象都需要修改原有代码,必须添加一个判断新对象类型的分支,来创建新对象。不符合开闭原则。


工厂模式特点

  有多个工厂,都继承至一个抽象工厂,这个抽象工厂包含有一个创建产品(所有产品的抽象类)对象的抽象方法。不同的产品由不同的产品工厂创建,每个产品工厂实现抽象工厂的创建方法,创建该产品工厂对应的产品。将具体产品的创建延迟到子类工厂的实例化后。

优点

  新增产品对着,只需要新增一个产品类,实现抽血产品接口,新增一个产品工厂,实现抽象工厂并实现创建产品的方法即可,不需要修改原有代码

缺点

  类数量增加,逻辑更抽象


抽象工厂特点

  跟工厂模式一样,区别就是每个工厂类中增加了一个方法,用于创建产品族的相似类型产品或者依赖产品,这种类型产品和之前的类型产品归属于一个产品族,比如面和荷包蛋,面具体有水煮面,凉面,它们属于面这种类型产品,荷包蛋具体有水煮荷包蛋,煎蛋,它们属于荷包蛋这种类型产品,但是面和荷包蛋都归属于产品族,它们属于一个族--食物,抽象工厂可以创建不同产品族的产品。个人认为抽象工厂模式应该叫做家族模式更贴切

优点

与工厂模式一样,不过多了产品族的特性,工厂模式只能创建一种类型的产品,而抽象工厂可以创建多种相似类型的产品,其中这些相似类型的产品属于一个产品族

缺点

  跟工厂模式一样,甚至新增产品族的其他类型产品,还得在工厂中新增一个创建方法

上一篇下一篇

猜你喜欢

热点阅读