第二十四章 职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
注意:一个请求极有可能到了链末都得不到处理,或者因为没有正确配置而得不到处理。
/** * Created by hero on 16-4-7. */ public abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handleRequest(int request); } /** * Created by hero on 16-4-7. */ public class ConcreteHandler1 extends Handler { @Override public void handleRequest(int request) { if (request < 10) { System.out.println("handled by 1"); } else if (successor != null) { successor.handleRequest(request); } } } /** * Created by hero on 16-4-7. */ public class ConcreteHandler2 extends Handler { @Override public void handleRequest(int request) { if (request < 20) { System.out.println("handled by 2"); } else if (successor != null) { successor.handleRequest(request); } else { System.out.println("no handler"); } } } public class Main { public static void main(String[] args) { ConcreteHandler1 concreteHandler1 = new ConcreteHandler1(); ConcreteHandler2 concreteHandler2 = new ConcreteHandler2(); concreteHandler1.setSuccessor(concreteHandler2); int[] requests = {10, 2, 22, 33, 7, 5}; for (int request : requests) concreteHandler1.handleRequest(request); } }
世上无难事,只要肯登攀。