作用:多个对象都有机会去处理请求,避免请求发送者与接受者之间的耦合。
将这些对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
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(); 否则,审批成功。直接返回。
在内部,如果不经过部门经理,那么不传入 后继对象 为部门经理即可。
内部扭转是动态的。
也可以从任何一个地方开始。