责任链模式,是行为型设计模式之一。
定义
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止。
使用场景
多个对象可以处理同一个请求,但具体有哪个对象处理则在运行是动态决定。
在请求处理者不明确的情况下向多个对象中的一个提交请求。
需要动态制定一组对象处理请求。
UML图:
代码:
Director.java
public class Director extends Leader {
@Override
public int limit(){
return 5000;
}
@Override
public void handle(int money){
System.out.println("主管批复报销"+ money+"元");
}
}
GroupLeader.java
public class GroupLeader extends Leader{
@Override
public int limit(){
return 1000;
}
@Override
public void handle(int money){
System.out.println("组长批复报销"+ money+"元");
}
}
Manager.java
public class Manager extends Leader{
@Override
public int limit(){
return 10000;
}
@Override
public void handle(int money){
System.out.println("经理批复报销"+ money+"元");
}
}
Boss.java
public class Boss extends Leader{
@Override
public int limit(){
return Integer.MAX_VALUE;
}
@Override
public void handle(int money){
System.out.println("老板批复报销"+ money+"元");
}
}
Leader.java
public abstract class Leader {
protected Leader nextHandler;
public final void handleRequest(int money){
if(money<=limit()){
handle(money);
}else{
if(null!=nextHandler){
nextHandler.handleRequest(money);
}
}
}
public abstract int limit();
public abstract void handle(int money);
}
XiaoMing.java
public class XiaoMing {
public static void main(String[] args){
GroupLeader groupLeader=new GroupLeader();
Director director=new Director();
Manager manager=new Manager();
Boss boss=new Boss();
groupLeader.nextHandler=director;
director.nextHandler=manager;
manager.nextHandler=boss;
groupLeader.handleRequest(50000);
}
}
运行结果: