职责链模式(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 }
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 }
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 }
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 }
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 }
处理完成---2 处理完成---15 处理完成---27 处理完成---11 处理完成---38 处理完成---16 处理完成---9