MyException - 我的异常网
当前位置:我的异常网» 设计模式 » 设计模式大小结(二)

设计模式大小结(二)

www.MyException.Cn  网友分享于:2014-06-22  浏览:2次
设计模式大总结(二)

    上篇博客给大家介绍了六大原则和设计模式之间的关系,以及创建型模式和结构型模式

(http://blog.csdn.net/zhangzijiejiayou/article/details/32712779)。本文将给大家介绍行为型模式。

行为型模式

    是对在不同的对象之间划分职责和算法的抽象化。




    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到

通知并被自动更新。

    优点:在解耦合,让耦合的双方都依赖于抽象的接口而不是具体,从而使各自的变化都不会影响另一边的变化。

依赖倒转原则的最佳体现。

    缺点:抽象观察者的接口的任务过于繁重。运用时要把握好这个尺度。

 

    模板方法:定义一个操作算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构

即可重新定义该算法的某些特定步骤。

    优点:提供了一个很好的代码复用的平台。很好地体现了开放封闭原则和里氏代换原则。

    缺点:算法骨架不容易升级

    模板方法可以用桥接模式模拟实现

 

    命令模式:将一个请求封装为一个对象,从而使你可用不同的的请求对客户进行参数化;可以对请求排队或记录

请求日志,以及支持可撤销的操作。

    优点:将调用操作的对象和知道如何实现该操作的对象解耦

    缺点:用来执行操作的接口的任务比较繁重。

 

    状态模式:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。

    优点:与特定状态相关的行为局部化,并且将不同状态的行为分割开来,状态模式通过把各种状态转移逻辑分布

State的子类之间,来减少相互间的依赖

    状态模式和策略模式在模式结构图上基本上是一样的

 

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成

一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    优点:接收者和发送者都没有对方明确的消息,且链中的对象自己也并不知道链的结构。降低了耦合度。

    缺点:一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理。


    职责链和命令模式都可以将请求的发送者和接收站之间解耦合,但执行方式不同。

 

    解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使该表示来解释语言中

的句子。

    优点:容易改变和扩展文法,因为该模式使用类来表示文法法则,可以使用继承来改变或扩展文法。也比较容易

实现文法,因为定义抽象语法树中各个节点的类的实现大题类似,这些类都易于直接编写。

    缺点:包含许多规则的文法可能难以管理和维护。建议当文法非常复杂时,使用其他的技术如语法分析程序或编

译生成器来处理。

 

    中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦

合松散,而且可以独立地改变他们之间的交互。

    优点:降低了类之间的耦合,关注的对象从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更

宏观的角度去看待系统。

    缺点:交互复杂性变为中介者的复杂性

 

    访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用

于这些元素的新操作。

    优点:数据结构和作用于结构上的操作之间的耦合度降低

    缺点:增加新的数据结构变得困难。

 

    策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使

用它的客户变化。

    优点:定义了一系列的可重用的算法或行为,继承有助于析取这些算法中的公共功能。简化了单元测试。

    缺点:并没有解除客户端需要需要判断的压力。

 

    策略模式和简单工厂模式结合可以大大减轻客户端的职责。

 

    桥接模式和策略模式

    相同:某些情况下,可以使用桥接模式来模拟实现策略模式的功能。

    不同:最主要的是模式的目的不一样,策略模式的目的是封装一系列的算法,使得这些算法可以相互替换;而桥

接模式的目的是分离抽象部分和实现部分,使得它们可以独立地变化。

 

    备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可将该

对象恢复到原先保存的状态。

    优点:可将该对象恢复到原先保存的状态。

    缺点:如果状态数据很大很多,会非常消耗内存

 

    命令模式和备忘录模式结合可以使用备忘录模式来存储可撤销操作的状态。

 

    迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

    优点:为遍历不同的聚集结构提供如开始、下一个、是否结束、当前那一项等统一接口。分离了集合对象的遍历

行为,抽象出一个迭代器类来负责,这样既可以不暴露集合内部结构,又可让外部代码透明地访问集合内部的数据。

 

个人小结:

    只要真正深入地理解了设计原则,很多设计其实就是原则的而已,或许在不知不觉中就在使用设计模式了。亦或

我们可以再根据设计模式的基本原则设计出更好的更实用的模式来。就像《倚天屠龙记》中张无忌练习武当派武功的

最高境界就是“全忘记”,其实设计模式的最高境界也是这样,应用于无形当中。


文章评论

程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员和编码员之间的区别
程序员和编码员之间的区别
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
为什么程序员都是夜猫子
为什么程序员都是夜猫子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员必看的十大电影
程序员必看的十大电影
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
我的丈夫是个程序员
我的丈夫是个程序员
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员应该关注的一些事儿
程序员应该关注的一些事儿
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
编程语言是女人
编程语言是女人
Java程序员必看电影
Java程序员必看电影
漫画:程序员的工作
漫画:程序员的工作
代码女神横空出世
代码女神横空出世
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
10个调试和排错的小建议
10个调试和排错的小建议
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
老程序员的下场
老程序员的下场
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
 程序员的样子
程序员的样子
每天工作4小时的程序员
每天工作4小时的程序员
如何成为一名黑客
如何成为一名黑客
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
总结2014中国互联网十大段子
总结2014中国互联网十大段子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
中美印日四国程序员比较
中美印日四国程序员比较
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有