一个故事看懂责任链模式
原创
©著作权归作者所有:来自51CTO博客作者无名同学的原创作品,请联系作者获取转载授权,否则将追究法律责任
小员工要求老板发聚餐费,各个等级的老板能够批准的额度是不一样的,上级批不了给上上级,上上级批不了给上上上级,一直往上直到最终大boss。
public abstract class Handler {
protected Handler successor;
public abstract void handleRequest(int money);
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
责任链接口,每个上级还有自己的处理方法和上级boss的信息。
小boss:
public class SmallBoss extends Handler {
@Override
public void handleRequest(int money) {
if (money < 100) {
System.out.println("小于100块,哥批准了");
} else {
System.out.println("艹,这么多钱,交给我领导处理。");
getSuccessor().handleRequest(money);
}
}
}
中boss:
public class MiddleBoss extends Handler {
@Override
public void handleRequest(int money) {
if (money < 500) {
System.out.println("小于500的,哥处理了");
} else {
System.out.println("哥处理不了,给我领导吧");
getSuccessor().handleRequest(money);
}
}
}
大Boss
public class BigBoss extends Handler {
@Override
public void handleRequest(int money) {
if (money < 1000) {
System.out.println("我处理了,哥批准了");
} else {
System.out.println("我处理了,你明天不用来了");
}
}
}
测试:
public class Main {
public static void main(String[] args) {
Handler handler = new SmallBoss();
Handler handler1 = new MiddleBoss();
Handler handler2 = new BigBoss();
handler.setSuccessor(handler1);
handler1.setSuccessor(handler2);
handler.handleRequest(13000);
}
}
艹,这么多钱,交给我领导处理。
哥处理不了,给我领导吧
我处理了,你明天不用来了