首页 > 代码库 > 设计模式--责任链模式

设计模式--责任链模式

设计模式--责任链模式

1 概述


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

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

  • 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 }

设计模式--责任链模式