避免请求的发送者,和接受者过度的耦合在一起。一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心。而请求的接受者可以自己处理它,也可以把它像链条一样向后传。
因此,请求也就意味着有可能丢失,或者说没有确切的安全保障。
1 降低耦合度
2 增强指派职责的灵活性
3 不保证被接受
Handler 定义一个接口,实现向后传递的过程
1 abstract class Handler{
2 protected Handler successor;
3
4 public abstract void handleRequest();
5
6 public Handler getSuccessor() {
7 return successor;
8 }
9
10 public void setSuccesor(Handler successor) {
11 this.successor = successor;
12 }
13
14 }
ConcreteHandler 可以负责请求,也可以向后传递
1 class ConcreteHandler extends Handler{
2 public void handleRequest(){
3 if(getSuccessor() != null){
4 System.out.println("getSuccessor !");
5 getSuccessor().handleRequest();
6 }else{
7 System.out.println("handle in this! request()!");
8 }
9 }
10 }
全部代码
1 package com.xingoo;
2 abstract class Handler{
3 protected Handler successor;
4
5 public abstract void handleRequest();
6
7 public Handler getSuccessor() {
8 return successor;
9 }
10
11 public void setSuccesor(Handler successor) {
12 this.successor = successor;
13 }
14
15 }
16 class ConcreteHandler extends Handler{
17 public void handleRequest(){
18 if(getSuccessor() != null){
19 System.out.println("getSuccessor !");
20 getSuccessor().handleRequest();
21 }else{
22 System.out.println("handle in this! request()!");
23 }
24 }
25 }
26 public class Client {
27 public static void main(String[] args) {
28 Handler handle1,handle2,handle3;
29 handle1 = new ConcreteHandler();
30 handle2 = new ConcreteHandler();
31 handle3 = new ConcreteHandler();
32 handle1.setSuccesor(handle2);
33 handle2.setSuccesor(handle3);
34 handle1.handleRequest();
35 }
36 }
运行结果
getSuccessor !
getSuccessor !
handle in this! request()!