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

设计模式大总结(一)

时间:2014-06-22 18:25:04      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:面向对象   设计模式   工厂模式   优化   继承   

   设计模式结束一段时间了,总结一直没有跟上来发表,下面我把我的小小的总结拿出来与大家共同探讨一下。

   设计模式看了两遍了,第一遍详细通读了一下课本,第二遍着重敲例子再次读课本,并且做总结,虽然过了两遍,但感觉设计模式的精髓还是没有很好的理解,自己现在也许理解的只有冰山一角,希望通过接下来的学习中,将设计模式运用到实践当中去。争取能够很好地站稳在巨人的肩膀上。下面做一个阶段性总结,有什么不妥的地方希望大家踊跃指正。

   设计模式有六大基本原则,前面的博文我进行了详细讲解(http://blog.csdn.net/zhangzijiejiayou/article/details/28110119http://blog.csdn.net/zhangzijiejiayou/article/details/28387323),而设计模式就是遵循六大基本原则的,分为三个类别模式,尽管每一个设计模式可能只遵循六大基本原则中的几个,但运用正确我们就会变得不简单。而六大基本原则又是基于面向对象的。所以通过设计模式的灵活运用可以实现面向对象的优点。


bubuko.com,布布扣


创建型模式

     创建型模式隐藏了这些类的实现是如何被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口.这样,创建型模式在创建了什么、谁创建它、它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性。


bubuko.com,布布扣


    抽象工厂:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类

    优点:(1)可以解决多个类型的产品创建问题,实现同一个对象与多个数据库ORM(对象关系映射)

         (2)让具体的创建实例过程与客户端分离,客户端通过抽象接口操作实例,产品的具体类也被具体工厂分离,不会出现在客户代码中          

    缺点:如果增加需求,改动量比较大。但模板模式通过Clone,可以很好的复用。

         

    建造者:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    优点:使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要定义一个具体的建造者就可以了。

    缺点:对象内部的构建面临着复杂的变化

 

    工厂方法:定义一个用于创建对象接口,让子类决定实例化哪一个类,工厂模式使得一个类的实例化延迟到其子类.

    优点:克服了简单工厂违背开放—封闭原则的缺点,保持了封装对象创建过程的优点。更换对象时不需要做大的改动就可以实现,降低了客户程序与产品对象的耦合。

    缺点:每增加一个产品就需要加一个产品类,增加了额外的开发量。模板模式

 

    原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新型的对象

    优点:一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。原型模式可以做到无缝扩展,通过Clone比其它模式效果要好。

    缺点:每个对象都实现这种方法工作量大

 

    单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点

    优点:让类自身负责保存它的唯一自身负责保存它的唯一实例,这个类可以保证没有其它实例被创建,并且还提供一个访问该实例的方法。可以严格控制客户怎样以及何时访问它。


结构型模式

    结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。


bubuko.com,布布扣


    适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由接口不兼容而不能一起工作的那些类可以一起工作。

    优点:客户代码可以统一调用同一接口。

    缺点:类适配器,对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。对象适配器,与类适配器模式相比,要想置换适配者类的方法就不容易。

 

    桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。

    优点:减少了耦合度

 

    桥接模式和适配器模式的比较

    相同:这个模式和适配器模式具有一些共同的特征,就是给另一个对象提供一定程度的间接性,有利于系统的灵活性。

    不同:两个模式用于软件生命周期的不同阶段,针对的是不同的问题

    桥接模式和抽象工厂、适配器模式可以组合使用。

 

    组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

    优点:基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以组合,这样不断地递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象。

 

    装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。

    优点:把类中的装饰功能从类中搬移出去,可以简化原有的类

 

    外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

    优点:设计初期应该有意识将不同的两个层分离

    开发阶段子系统不断重构演化变得复杂,产生许多小类,通过外观模式可提供一个小的接口,减少他们间的依赖。维护遗留的大型系统时一般用外观模式。

 

    外观模式和适配器模式比较

    相同:都是对现存系统的封装。

    不同:外观模式是定义一个新的接口,适配器复用一个原有的接口。外观模式针对的对象的粒度更大。

 

    享员模式:为运用共享技术有效地支持大量细粒度的对象。

    优点:可以避免大量非常相似累的开销。

 

    代理模式:为其它对象提供一种代理以控制这个对象的访问

    优点:代理模式通过代理实现了客户端和实体之间的联系,降低了实体和客户端的联系。代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

    接下来的文章,会给大家介绍一下行为模式,敬请期待吧!




设计模式大总结(一),布布扣,bubuko.com

设计模式大总结(一)

标签:面向对象   设计模式   工厂模式   优化   继承   

原文地址:http://blog.csdn.net/zhangzijiejiayou/article/details/32712779

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