ChainOfResponsibility

概述:

推卸责任,将多个对象组成一条职责链,然后按照他们在职责连上的顺序一个一个的找出到底是谁来负责处理

ChainOfResponsibility_sample


说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    简单对于一个问题处理的模拟,根据问题编号的不同判断是否对其进行处理

  • ChainOfResponsibility_uml_case
  • 主要代码:
  • Main.java
    package Gof.ChainOfResponsibility;
    
    public class Main {
        public static void main(String[] args) {
            Support alice   = new NoSupport("Alice");
            Support bob     = new LimitSupport("Bob", 100);
            Support charlie = new SpecialSupport("Charlie", 429);
            Support diana   = new LimitSupport("Diana", 200);
            Support elmo    = new OddSupport("Elmo");
            Support fred    = new LimitSupport("Fred", 300);
            // 形成职责链
            alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred);
            // 制造各种问题
            for (int i = 0; i < 500; i += 33) {
                alice.support(new Trouble(i));
            }
        }
    }
    
  • 解决[trouble 363] 的时序图:
  • uml_sentense
  • 代码链接:传送门

    uml综述ChainOfResponsibility_uml

  • Handler: 定义了处理请求的接口
  • ConcreteHandler: 处理请求的具体角色
  • Client: 第一个想concreteHandler发送请求的角色

收获:

  • 弱化了发出请求的人和处理请求的人之间的联系
  • 可以动态的改变职责链
  • 专注自己的工作
  • 推卸请求会导致处理延迟

相关设计模式:

  • Composite : handler对象经常会使用composite模式
  • Command : 使用Command模式向handler发送请求

注意:

此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!

PS:欢迎大家来到我的小站,鸣谢!