zoukankan      html  css  js  c++  java
  • 设计模式:工厂模式

    简单工厂

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

    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

  • 相关阅读:
    csp-s89考试记录
    急需巩固
    近日反思
    csp-s 81 瓶颈
    近日总结
    csp-s 76总结
    PhoneGap + JQueryMobile + HTML5
    PHP大文件上传配置
    scp命令报错(IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!)
    mysql权限设置
  • 原文地址:https://www.cnblogs.com/insaneXs/p/11740609.html
Copyright © 2011-2022 走看看