比较工厂三姐妹
简单工厂模式:就是由一个工厂类根据传入的参量决定创建哪一种产品类的实现。
优缺点:
1、对于工厂角色不满足开放封闭原则;
2、实现责任分割。
工厂方法模式:是简单工厂模式的进一步抽象和推广,将具体创建工作由具体工厂去做。定义一个用于创建对象的接口,让子类决定实例化哪一个类。
简而言之,允许一个类的实例化推迟到子类中进行。
结构图:
举例:商场收银软件
优缺点:克服简单工厂的缺点,完全支持开闭原则。
注意:工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。
抽象工厂模式:向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。简而言之,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体类。
结构图:
举例:就不能不换DB吗?(《大话设计模式》中的例子)
优缺点:增加新产品族,支持开闭原则。
增加新的产品等级结构,不支持开闭原则。
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。
简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。不符合开放封闭的原则。
工厂方法:工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。通常设计应该是从工厂方法开始,当设计者需要更大的灵活性时,设计便会向其他创建型模式演化。
抽象工厂:抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。
简单来说,就是简单工厂 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);工厂模式用来生产同一等级结构中的固定产品。(支持增加任意产品) ;抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
以上三种工厂方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。
本文链接:http://blog.csdn.net/caozhangyingfei0109/article/details/8606396
本文作者:廊坊师范学院信息技术提高班九期张薄