• 设计模式:工厂模式


    简单工厂

    简单工厂:简单工厂并非设计模式的一种。

    UML如下图所示

    说明

    主要分为两个角色:ProductFactoryProduct是产品的抽象接口,定义了产品的行为,具体的产品会实现这个类型,定义特定的行为。而Factory是工厂类,主要负责产品的创建工作,并且统一返回Product这个接口,而非具体产品。

    优势

    考虑以下场景:假设我们有一个Consumer需要依赖Product

    • 首先我们将Product的创建工作从Consumer中分离出来交给了FactoryConsumer只需要关注如何使用Product。让每个角色可以各司其职,符合单一职责原则
    • 另一方面,因为ConsumerProduct中间通过Factory联系,且Factory并没有返回具体的Product,那么假设Consumer依赖的产品发生变换,或是添加了新的Product,对Consumer的修改相对来说较小。降低了ConsumerProduct耦合

    工厂方法模式

    UML类图:

    说明

    工厂方法模式中的工厂只是一个抽象的接口,具体的产品创建过程在具体的子类中实现。每种产品都有自己的工厂类去创建。

    优势

    相较于简单工厂,工厂方法模式的优势在于当Product的种类不断增多时,Factory不再需要不断的修改自己创建Product的方法。只需要在增加Product时,同时增加相应的Factory即可。比较好的满足了开闭原则

    抽象工厂模式

    UML类图:

    说明

    抽象工厂方法可以针对产品族进行管理,确保一系列的组件能够互相匹配。

    优势

    抽象工厂屏蔽了Consumer对于底层一组Product的感知,只需修改一个工厂类,就有可能调整整个Consumer的行为。对于需要依赖一系列组件工作的客户端来说,抽象工厂做到了高内聚低耦合

    劣势

    抽象工厂的劣势是一套组件中需要增加一个新组建时,需要修改接口中的方法,因此影响了所有工厂的实现类。

    工厂模式的退化

    • 当工厂的接口和实现合并为一个类时,工厂方法模式退化成了简单工厂
    • 抽象工厂负责的产品只有一个时,变退化成了工厂方法模式

    DEMO及测试代码见Github

  • 相关阅读:
    [Swift]GZip字符串压缩和解压缩(Java/C#通用)
    [XCode]UI测试/单元测试
    转 oracle apex 使用
    转 pygame学习笔记(1)——安装及矩形、圆型画图
    转 11g RAC R2 体系结构---Grid
    转如何升级oracle版本?(11.2.0.1至11.2.0.4)
    ORA-14074: partition bound must collate higher than that of the last partition
    12c pdb expdp use DATA_PUMP_DIR meet ORA-39145
    转【Python】Python-skier游戏[摘自.与孩子一起学编程]
    Dock
  • 原文地址:https://www.cnblogs.com/insaneXs/p/11740609.html
Copyright © 2020-2023  润新知