设计模式--责任链模式

Posted 默默的看雨下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--责任链模式相关的知识,希望对你有一定的参考价值。

设计模式--责任链模式

1 概述


1.1 定义
责任链模式(Chain of Responsibility Design)使多个对象都有机会处理请求,从而避免了请求的发送者与接受者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有对象处理它为止。
责任链模式把处理者与被处理者分隔开,彼此都不知道其具体的实现,实现了处理者与被处理者间的解耦。
1.2 应用
Java Web中的Filter就是责任链变现形式,只是稍微变形了一下。
Java中的异常处理就很像这种思想:抛出异常-->处理异常/向上抛异常-->处理异常/向上抛异常-->....直到处理该异常或者抛给console。
1.3 类图
enter description here

责任链模式涉及的角色如下:

  • Handler处理者抽象角色:定义处理者的基本方法:处理方法、设置下一个处理者方法等
  • Handler处理者具体角色:具体的处理者

2 详解

 1 public abstract class Handler {
 2     // 下一个处理者
 3     private Handler nextHandler;
 4 
 5     // 每个处理者对请求做出处理
 6     public final void handle(String str) {
 7         // 根据条件判断是否由自己处理
 8         if(condition) {
 9             concreteHandle(str);
10         }
11         // 不属于自己处理,交由下一个处理者处理
12         if(nextHandler != null) {
13             nextHandler.handle(str);
14         } else {
15             return;
16         }
17     }
18     
19     // 设置下一个处理者
20     public void setNext(Handler handler) {
21         this.nextHandler = handler;
22     }
23 
24     // 具体的处理
25     public abstract void concreteHandle(String str);
26 }
27 
28 public class ConcreteHandler1 extends Handler {
29     @Override
30     public void concreteHandle(String str) {
31         System.out.println("ConcreteHandler1 handle " + str);
32     }
33 }
34 
35 public class ConcreteHandler2 extends Handler {
36     @Override
37     public void concreteHandle(String str) {
38         System.out.println("ConcreteHandle handle " + str);
39     }
40 }
41 
42 public class Client {
43     public static void main(String[] args) {
44         // 声明所有处理者
45         Handler handler1 = new ConcreteHandler1();
46         Handler handler2 = new ConcreteHandler2();
47         // 设置处理链顺序
48         handler1.setNext(handler2);
49         // 处理
50         handler1.handle("hello");
51     }
52 }

以上是关于设计模式--责任链模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式----责任链模式

设计模式之责任链模式

责任链模式

前端探索告别烂代码 用责任链模式封装网络请求

(十五)责任链模式-代码实现

设计模式:责任链模式