责任链模式

职责链模式(Chain ofResponsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者
之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

 

 

当客户有一个请求时,请求是沿链传递直到有一个ConcreteHandle对象负责处理它;

接收者和发送者都没有对方明确的信息,且链中的对象也不知道链的结构。
结果是责任链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不
需保持它所有的候选接收者的引用。

实现代码示例:

 1 public abstract class Handle {
 2     protected Handle successor;
 3     
 4     public void setSuccessor(Handle successor) {
 5         this.successor = successor;
 6     }
 7     
 8     public abstract void handleRequest(int request);
 9     
10 }
Handle
 1 public class ConcreteHandleA extends Handle {
 2 
 3     @Override
 4     public void handleRequest(int request) {
 5         if(request>=0 && request<10){
 6             System.out.println("处理完成---"+request);
 7         }else{
 8             successor.handleRequest(request);
 9         }
10     }
11 
12 }
ConcreteHandleA
 1 public class ConcreteHandleB extends Handle {
 2 
 3     @Override
 4     public void handleRequest(int request) {
 5         if(request>=10 && request<20){
 6             System.out.println("处理完成---"+request);
 7         }else{
 8             successor.handleRequest(request);
 9         }
10 
11     }
12 
13 }
ConcreteHandleB
 1 public class ConcreteHandleC extends Handle {
 2 
 3     @Override
 4     public void handleRequest(int request) {
 5         if(request>=20 && request<40){
 6             System.out.println("处理完成---"+request);
 7         }else{
 8             successor.handleRequest(request);
 9         }
10 
11     }
12 
13 }
ConcreteHandleC
 1 public class HandleTest {
 2 
 3     public static void main(String[] args) {
 4         Handle h1 = new ConcreteHandleA(); 
 5         Handle h2 = new ConcreteHandleB(); 
 6         Handle h3 = new ConcreteHandleC(); 
 7         
 8         h1.setSuccessor(h2);
 9         h2.setSuccessor(h3);
10         int[] arr = {2,15,27,11,38,16,9};
11         for (int i = 0; i < arr.length; i++) {
12             h1.handleRequest(arr[i]);
13         }
14     }
15 
16 }
test
处理完成---2
处理完成---15
处理完成---27
处理完成---11
处理完成---38
处理完成---16
处理完成---9
测试打印

 

posted @ 2020-07-29 14:55  就是你baby  阅读(129)  评论(0编辑  收藏  举报