美文网首页
读《大话设计模式》之抽象工厂模式

读《大话设计模式》之抽象工厂模式

作者: 梦半觉 | 来源:发表于2017-10-22 21:33 被阅读10次

    一、模式概述:

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

    先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。

    UML图:

    抽象工厂模式
    • 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

    • 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

    • 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

    • 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

    二、模式优缺点:

    优点:

    1、 抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
    2、 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
    3、 增加新的具体工厂和产品族很方便,无须修改已有系统,符合开闭原则。

    缺点:

    增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对开闭原则的支持呈现倾斜性。
    如果需要增加新的产品树,那么就要新增三个产品类,并且要修改三个工厂类。这样大批量的改动是很丑陋的做法。
    所以可以用简单工厂配合反射来改进抽象工厂。

    三、模式适用场景:

    1、 系统中有多个产品族,而系统一次只可能消费其中一族产品
    2、 同属于同一个产品族的产品以其使用。
    当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。

    四、模式总结:

    提供一个创建一系列相关或互相依赖的接口,而无需指定它们具体的类。
    抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。

    相关文章

      网友评论

          本文标题:读《大话设计模式》之抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/seoguxtx.html