定义

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度。

案例
比方如今有一个图形界面,它包含一个应用Application类,一个主窗体Window,一个buttonButton,Window和Button都是继承自Widget类,如今在Button上按滑动鼠标滚轮。Button类不一定要处理,可能是Window类处理,也可能是是Application类处理,每个类仅仅处理自己关心的。从一个链式结构。以此查看是否要处理:


每个对象都有处理事件的权利,当不处理的时候就会交给父对象处理:
  1. Class EventHandler {
  2. public:
  3. EventHandler(EventHandler* eh) : m_handler(eh) { }
  4. virtual void handle(Event* e) { if (m_handler) m_handler->handle(e); }
  5. private:
  6. EventHandler* m_handler;
  7. }
  8. class Application : EventHandler {
  9. public:
  10. Applicatoin();
  11. void exec() { ... }
  12. }
  13. class Widget : EventHandler {
  14. public:
  15. Widget(Widget* parent) : EventHandler(parent) { }
  16. void draw() { ... }
  17. }
  18. class Window : public Widget {
  19. public:
  20. virtual void handle(Event* e) {
  21. if(e->type() == WheelEvent)
  22. ...;
  23. else
  24. Widget::Handle(e);
  25. }
  26. }
  27. class Button : public Widget{
  28. public:
  29. virutal void handle(Event* e) {
  30. if(e->type == MousePressEvent)
  31. ...
  32. else
  33. Widget::handle(e);
  34. }
  35. }
  36. int main()
  37. {
  38. Application app;
  39. Widget widget;
  40. Button button(widget);
  41. return app.exe();
  42. }
Button仅仅处理鼠标button的时间。像滚轮的事件就会继续发送出去。恰好的父控件的时候能够处理,父控件就会处理掉。

适用性
  • 有多个对象能够处理一个请求。详细哪个对象处理执行时刻确定。
  • 在不想指明接受者的情况下。
优缺点
  1. 减少了系统的耦合度。请求处理和处理对象之间没有明白关系。
  2. 增强了给对象指派指责的灵活性。

  3. 不保证被一个对因为它可以处理该请求。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Chain of Responsibility - 责任链模式的更多相关文章

  1. 设计模式(13)--Chain of Responsibility(责任链模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一 ...

  2. Chain of Responsibility 责任链模式

    简介 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其[下家]的引用而连接起来形成一条链,请求在这个链上[传递],直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知 ...

  3. 设计模式(一)Chain Of Responsibility责任链模式

    设计模式篇章,源于网课的学习,以及个人的整理 在我们接收用户提交的字符时,常常会使用到过滤,在学习责任链模式前,我们是这样做的 1.定义一个类 public class MsgProcesser { ...

  4. Chain of Responsibility 责任链模式 MD

    责任链模式 简介 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上[传递],直到链上的某一个对象决定处理此请求.发出这个请求的客户 ...

  5. python 设计模式之 (Chain of Responsibility)责任链模式

    #写在前面 对于每一种设计模式,如果不理解它的原理和结构,是写不出例子来的.所以弄明白很重要. 等过完这段浑浑噩噩的日子,我要找个遍地开花的地方开怀大笑一场 #责任链模式定义 简书上一网友就把这个定义 ...

  6. 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)

      17.1.解释 概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. main(),客户 IWom ...

  7. 设计模式19:Chain Of Responsibility 职责链模式(行为型模式)

    Chain Of Responsibility 职责链模式(行为型模式) 请求的发送者与接受者 某些对象请求的接受者可能有多种多样,变化无常…… 动机(Motivation) 在软件构建过程中,一个请 ...

  8. Design Pattern Chain of Reponsibility 责任链模式

    本程序实现一个责任链模式查询人名的资料. 開始都是查询第一个人,问其是否有某人的资料,假设有就返回结果,假设没有第一个人就会询问第二个人,第二个人的行为和第一个人的行为一致的,然后一致传递下去,直到找 ...

  9. 设计模式学习笔记——Chain of Responsibility职责链模式

    重点在链.一条链,如果本节点处理不了,则传递给下一个节点处理. 关键是如何传给下一个节点? 主要是由本节点决定传给哪一个节点. public class Client { public static ...

随机推荐

  1. 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹

    我最近遇到一个问题.虚拟机Linux中间Samba服务常开.主办"\\192.168.229.200" (我的虚拟机Linux址)訪问不了Share文件夹(/var/test),并 ...

  2. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  3. 得知Android小遴选程序第七头(他们定义对话框、Gallery、ImageSwitcher)

    效果如下面的:            一共一个activity和两个xml. ******当我们须要使用的组件不在setContentView()设置的布局文件里,那我们就须要使用inflate()方 ...

  4. 小巧的UML工具-UMLet

    画简单的UML图时非常方便 比如我画blog中的流程图就是用的UMLet

  5. JAVA学习篇--JAVA两种编程模式控制

    在Drp项目中,解说了两种编程模式Model 1和Model2.以下是对这两种模式的简单理解.以及因为Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对照学习一下. ...

  6. Android - 用Fragments实现动态UI - 使用Android Support Library

    Android Support Library提供了一个带有API库的JAR文件来让你可以在使用最新的Android API的同时也也已在早期版本的Android上运行.例如,Support Libr ...

  7. Swift学习笔记7:关闭

    闭包 捕 引用和将其存储在任意常量和变量的上下文. Swift 你会管理 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包採取例如以下三种形式之中的一个: ...

  8. hadoop出现namenode running as process 18472. Stop it first.

    hadoop出现namenode running as process 18472. Stop it first.等等,类别似几个的出现. namenode running as process 32 ...

  9. 初步STL集装箱Vector

    vector 特点: 1.可变长的动态数组 2.使用时包括头文件 #include <vector> 3.支持随机訪问迭代器 • 依据下标随机訪问某个元素时间为常数 • 在尾部加入速度非常 ...

  10. UIButton 文字图片排列

    UIButton缺省值是:图画-文字水平,所以我们并不需要调整. 1.写作-图画 水平显示,以前的文本,图片后再次 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0 ...