zoukankan      html  css  js  c++  java
  • 三个工厂模式的分析

        学习设计模式非常长时间了,一直想把这些模式进行分类和总结。却不知道从哪里開始。发现工厂模式是一个系列,就从三个工厂模式说起吧。

        首先来说简单工厂模式。以设计计算器为例分析这个模式,简单工厂模式抽象出了一个业务逻辑的父类。父类定义了定义了属性和方法。子运算类仅仅须要重写运算方法就可以,client负责输入和输出数据,运算工厂类决定实例化对象。

    简单工厂类结构图:


             简单工厂实现了业务逻辑和界面逻辑的分离,可是假设我们须要添加或降低计算器功能,须要改动运算工厂类,这不符合开放封闭原则,这个模式要谨慎使用。

             前边的简单工厂模式由于运算工厂类不符合开放封闭原则。工厂方法类非常好的攻克了这个问题。

    还是以计算器为例,在简单工厂模式的基础上,我们来改进这个模式。我们把运算工厂的选择方法写成工厂类,然后抽象出一个公共接口。由各个子工厂类实现这个接口。推断应该实例化哪个对象。

    工厂方法类结构图:


            工厂方法模式克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的长处。它的缺点是每添加一个产品,须要添加一个产品工厂的类,添加了额外的开发量,而且工厂方法没有避免选择推断的问题,仅仅是把这个任务交给了client。

            抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们详细的类。抽象工厂的长处是便于交换产品系列,而且让详细的创建实例过程与client分离。

    抽象工厂类结构图:


              抽象工厂也没有解决选择推断的问题。这里我们引入反射方法,就是把选择推断做成变量来处理。就是将程序选择推断由编译时转为执行时处理。

             软件开发中。设计模式的使用是把双刃剑,假设应用得当。能够帮助我们更好的解决这个问题,假设处理不当,将会使软件开发和维护更为棘手。



  • 相关阅读:
    centos通过yum安装mongodb
    js基于另一个数组排序数组
    centos 7 安装emule客户端
    typescript中interface和type的区别
    nodejs安装管理工具nvm的安装和使用
    PM2的参数配置
    centOS添加ipv6支持(仅限已分配ipv6地址和网关)
    linux执行计划任务at命令
    mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天等等
    win10子系统ubuntu内的nginx启动问题
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6921546.html
Copyright © 2011-2022 走看看