作用:多个对象都有机会去处理请求,避免请求发送者与接受者之间的耦合。
将这些对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
1.是承担责任
2.传递责任
抽象处理角色:
定义处理请求的接口,抽象方法,定义一个方法为了设定 和 返回下一个处理对象的对象的引用。
public abstract class Handler{
//下一个处理者的引用
private Handler nextHandler;
//处理请求的方法
public abstract void handleRequest();
//获取下一处理者引用
public Handler getNextHandler(){
return nextHandler;
}
public void setNextHandler(Handler next){
this.nextHandler = next;
}
}
具体处理角色:
public class ConcreteHandler extends Handler{
public void handleRequest(){
//看是否有后继的对象,没有则处理
if(getNextHandler()!=null){
System.out.println("由下一对象处理该请求")
getNextHandler().handleRequest();
}else{
System.out.println("处理请求");
}
}
}
客户端使用:
main(){
Handler handler1 = new ConcreteHandler();
Handler handler2 = new ConcreteHandler();
handler1.setNextHandler(handler2);
handler1.handleRequest();
}
比如,客户端,请求报销1000元。
项目经理,在500以内,部门经理1000元以内,总经理,1000元以上。
那么我的请求,zhang,费用:1000
首先由项目经理审批 if(fee>500) 则,getNextHandler().handleRequest(); 否则,审批成功。直接返回。
接下来由部门经理审批 if(fee>1000) 则,getNextHandler().handleRequest(); 否则,审批成功。直接返回。
在内部,如果不经过部门经理,那么不传入 后继对象 为部门经理即可。
内部扭转是动态的。
也可以从任何一个地方开始。