学习设计模式很长时间了,一直想把这些模式进行分类和总结,却不知道从哪里开始。发现工厂模式是一个系列,就从三个工厂模式说起吧。
首先来说简单工厂模式,以设计计算器为例分析这个模式,简单工厂模式抽象出了一个业务逻辑的父类,父类定义了定义了属性和方法,子运算类只需要重写运算方法即可,客户端负责输入和输出数据,运算工厂类决定实例化对象。
简单工厂类结构图:
简单工厂实现了业务逻辑和界面逻辑的分离,但是如果我们需要增加或减少计算器功能,需要修改运算工厂类,这不符合开放封闭原则,这个模式要慎重使用。
前边的简单工厂模式因为运算工厂类不符合开放封闭原则,工厂方法类很好的解决了这个问题。还是以计算器为例,在简单工厂模式的基础上,我们来改进这个模式,我们把运算工厂的选择方法写成工厂类,然后抽象出一个公共接口,由各个子工厂类实现这个接口,判断应该实例化哪个对象。
工厂方法类结构图:
工厂方法模式克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。它的缺点是每增加一个产品,需要增加一个产品工厂的类,增加了额外的开发量,并且工厂方法没有避免选择判断的问题,只是把这个任务交给了客户端。
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类。抽象工厂的优点是便于交换产品系列,并且让具体的创建实例过程与客户端分离。
抽象工厂类结构图:
抽象工厂也没有解决选择判断的问题,这里我们引入反射方法,就是把选择判断做成变量来处理,就是将程序选择判断由编译时转为运行时处理。
软件开发中,设计模式的使用是把双刃剑,如果应用得当,可以帮助我们更好的解决问题,如果处理不当,将会使软件开发和维护更为棘手。
原文地址:http://blog.csdn.net/u010942465/article/details/26669379