一场工厂模式的Pk

    对于工厂模式三姐妹,大家想必都已经烂熟于心了。不过,虽然设计模式看了一半多了,对于它的一部分思想还是有些困惑。没办法,写总结吧!

    工厂三姐妹是指简单工厂模式、工厂方法模式和抽象工厂模式。下面我们再来重新认识一下他们吧!

(一)简单工厂模式。

定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常是有共同的父类或者接口。

组成:

(1)Creator(工厂类):是简单工厂模式的核心,它负责创建所有具体产品类的实例。可以被外界调用创建所需的产品对象。

(2)Product(抽象产品类):所有具体产品角色的父类,它描述所有实例的共有的接口。

(3)Concrete Product(具体产品类):继承Product,是此模式的创建目标。工厂类返回的都是某一具体产品。

类图:

         

优点:通过使用工厂类,决定创建哪个具体类的对象。明确了各自职责。

缺点:违反了高内聚责任分配原则(所有实例创建都集中于工厂类)。违反了开放封闭原则(功能拓展时,需要修改工厂类)。

使用场景:(1)工厂类创建的对象较少;

        (2)客户只需知道传入参数,不必关心如何创建之时。

(二)工厂方法模式。

定义:工厂方法模式是定义一个创建产品抽象的工厂接口,将实际创建工作推迟到子类当中。

组成:

(1)抽象工厂角色:工厂方法模式的核心。创建对象的工厂类必须实现此接口。

(2)具体工厂角色:实现抽象工厂接口(角色)的具体工厂类。创建产品对象。

(3)抽象产品角色:有不同的实现。

(4)具体产品角色:实现抽象产品角色定义的接口。

类图:

  


优点:(1)用户只需知道产品的具体工厂,无需知道创建过程

      (2)很好的符合了开放封闭原则。在添加新产品时,只需要添加代码即可。

缺点:每增加一个产品,都要增加一个具体类和相应工厂,使系统复杂程度增大。

适用场景:(1)对于某个产品,调用者知道具体工厂并实例化,生产具体产品。

          (2)只需要一种产品,最终的具体工厂由生产者决定。

(三)抽象工厂模式。

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

组成:

(1)抽象工厂角色:包含所有产品创建的抽象方法。

(2)具体工厂角色:创建具有特定实现的产品对象。

(3)抽象产品角色:有不同的实现。

(4)具体产品角色:对抽象产品的具体实现。

类图:

优点:(1)隔离了具体类的创建。

      (2)符合开放封闭原则。增加产品类时十分方便。

缺点:增加新的产品等级结构时,需要修改工厂,不支持“开放封闭原则”。


简单工厂PK工厂方法

结构上,简单工厂是所有的产品都在一个工厂中生产。工厂方法模式不同产品各有一个工厂。这就决定了简单工厂模式的缺点可以在工厂方法模式中得到改善。

工厂方法PK抽象工厂

工厂方法只有一个抽象产品类,并且具体工厂类只能创建一个具体产品类。抽象工厂则有多个抽象产品类,并且具体工厂类可以创建多个具体产品类。


这三种模式各有各的优缺点。他们的结构越来越复杂,功能也越来越强大。扩展性和解耦能力也是越来越强。但是也不能说抽象工厂模式就是最好的。还要根据自己的情景来选择最合适的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值