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

  • 相关阅读:
    IBM X3650 M4服务器安装centos找不到硬盘的解决方法
    页面头部title、description、keywords标签的优化
    SEO优化之Title 和 Meta 标签
    WPA字典锦集
    PIN码计算锦集
    神经网络入门 第6章 识别手写字体
    神经网络入门 第5章 实现多层神经网络BP算法
    神经网络入门 第4章 神经网络可以模拟任意函数
    神经网络入门 第3章 S函数
    神经网络入门 第2章 编写第一个神经元
  • 原文地址:https://www.cnblogs.com/insaneXs/p/11740609.html
Copyright © 2011-2022 走看看