三个工厂模式的分析

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

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

简单工厂类结构图:


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

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

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

工厂方法类结构图:


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

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

抽象工厂类结构图:


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

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



posted on 2017-05-30 21:34  yjbjingcha  阅读(406)  评论(0编辑  收藏  举报

导航