zoukankan      html  css  js  c++  java
  • Chain of Responsibility

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

    案例
    比方如今有一个图形界面,它包含一个应用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. 不保证被一个对因为它可以处理该请求。


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

  • 相关阅读:
    关于写页面时容易发生的问题
    用wamp实现前端和php的交互效果
    原生封装的ajax
    用angular引入复杂的json文件2
    用angular引入复杂的json文件
    vue属性
    vue的事件
    require'模块化jquery和angular问题
    css3在页面中插入内容
    css3+javascript实现翻页幻灯片
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4802091.html
Copyright © 2011-2022 走看看