说明
定义:
职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
UML图:
包含角色:
1)Handler:抽象处理着;
2)ConcreteHandler:具体处理者。
代码实现:
典型的"抽象处理者"代码// 典型的"抽象处理者"代码 abstract class Handler { // 为了使得handler之间连接起来像一个链,这里用来存储下处理者 protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handleRequest(String request); }
典型的"具体处理者"代码
// 典型的"具体处理者"代码 class ConcreteHandler extends Handler{ @Override public void handleRequest(String request) { // 场景1)自己满足处理条件,就不往下流转;自己不满足处理条件,就往下流转 if(满足条件){ //1)处理 }else{ //2) 交给其他处理者处理 this.successor.handleRequest(request); } // 场景2)当然也可能是自己处理完,之后又交给下一个处理者处理 //1)当前处理 //2)交个下一个处理者处理 this.successor.handleRequest(request); } }
注意:
handleReuqest方法内部具体场景可以根据自己实际需求而定:
场景1)自己满足处理条件,就不往下流转;自己不满足处理条件,就往下流转
场景2)当然也可能是自己处理完,之后又交给下一个处理者处理
典型客户端调用代码:
Handler handler1=new ConcreteHandler1(); Handler handler2=new ConcreteHandler2(); Handler handler3=new ConcreteHandler3(); // 创建职责链 handler1.setSuccessor(handler2); handler2.setSuccessor(handler3); // 发送请求,请求对象通常为根据需求而定。 handler1.handleRequest("xxx");