码迷,mamicode.com
首页 > 其他好文 > 详细

《大话设计模式》——工厂模式的逐步升级

时间:2015-01-30 22:47:07      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:设计模式   工厂模式   面向对象编程   可扩展   

   大话设计模式是面向对象编程的进一步的剖析,等自己学过设计模式之后,才知道面向对象编程的几大大特征—抽象、封装、继承、多态的妙用。设计模式可以说是将这几大特征玩转的淋漓尽致啊。这几天学了设计模式中的工厂模式,觉得有必要总结一下,下面我来谈谈简单工厂模式,工厂方法模式,抽象工厂模式的特点。

    一、简单工厂模式

    简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类类(这些子类继承自一个父类或接口)的实例。在父类中定义了一个虚拟的方法,让子类去继承父类,然后到子类中再去重写虚拟的方法从而实现不同的功能,最后在定义一个工厂类,其作用就是根据传入的参数而实例化出不同子类的实例。如下图所示。

技术分享

   (1)、优点

    在简单工厂模式中工厂类是整个模式的关键,因为包含了必要的逻辑判断,就是根据外界给定的信息,按后去决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利。

   (2)、缺点

    由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了,这有违背了开放封闭原则。

    二、工厂方法模式

    工厂方法模式的意义就是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。工厂方法模式是简单工厂模式的进一步的抽象和推广,有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。类图如下所示。

技术分享

   (1)、优点:完全实现开放封闭原则,首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。

   (2)、缺点:每增加一个产品,就需要增加一个产品工厂类,增加额外额开发量。

    三、抽象工厂模式(Abstract Factory)

    定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么,这样一来,客户就从具体的产品中被解耦。类图如下。

技术分享

          

   (1)、优点:1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

   (2)、缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

    四、工厂方法模式与抽象工厂模式的总结与比较

    工厂方法模式:一个抽象产品类,可以派生出多个具体产品类;一个抽象工厂类,可以派生出多个具体工厂类;  每个具体工厂类只能创建一个具体产品类的实例。

    抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;一个抽象工厂类,可以派生出多个具体工厂类;  每个具体工厂类可以创建多个具体产品类的实例。  

    区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    五、小结

    总结完了这三个设计模式,然后再结合这三个设计模式中的具体例子,自己心里对这几个和设计模式有点底啦!这三个设计模式不断的升级,但是任何事情都有两面性,正所谓车到山前必有路,有路肯定有坎坷。在学设计模式的过程中,这是自己对面向对象编程的进一步的深入,也是自己陶醉在编程艺术中美的成果。在这里,我先说:“编程是一种工作,更是一种艺术”。


《大话设计模式》——工厂模式的逐步升级

标签:设计模式   工厂模式   面向对象编程   可扩展   

原文地址:http://blog.csdn.net/zhoukun1008/article/details/43311401

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!