设计模式之责任链模式总结

快速引入

责任链模式,首先肯定是一条链,然后链上每个节点都有他的责任,任务在链上传递,假设从第一个开始传递,传递到下一个时候如果他有责任处理这个事情就处理,没责任,或者不能处理就传递下去,依次这样。直到传到最后一个或者事情被处理完。这个非常好理解,跟日常公司中报销一样,如果你要报销5w,如果你的直接领导没权限报5w,就会转交给经理,经理没有就转给总经理,总经理没有就转到老板,然后批复。

实战

就拿上面的例子来做实战,熟悉下载代码中是怎么实现的
首先得上面个个角色都可以抽象成为一个领导的抽象类


public abstract class Leader {

    protected Leader nextHandler;// 本级领导的上一级
    // money为需要报账的钱

    public final void handleRequest(int money) {
        // 如果需要报账的钱小于自身能批的就处理。否则转发给上头
        if (money <= limit()) {
            handle(money);
        } else if (nextHandler != null) {

            nextHandler.handleRequest(money);
        }

    }
     //自己能处理的金额上限
    public abstract int limit();
     //处理
    public abstract void handle(int money);

}

然后定义各个具体领导者


public class Director extends Leader{

    @Override
    public int limit() {
        // TODO Auto-generated method stub
        return 1000;
    }

    @Override
    public void handle(int money) {
        // TODO Auto-generated method stub
        System.out.println("主管已处理你的请求");

    }


}

public class Manager extends Leader{

    @Override
    public int limit() {
        // TODO Auto-generated method stub
        return 20000;
    }

    @Override
    public void handle(int money) {
        // TODO Auto-generated method stub
        System.out.println("总经理已处理你的请求");

    }


}
public class Boss extends Leader{

    @Override
    public int limit() {
        // TODO Auto-generated method stub
        return Integer.MAX_VALUE;
    }

    @Override
    public void handle(int money) {
        // TODO Auto-generated method stub
        System.out.println("boss已处理你的请求");

    }


}

然后调用的时候,先将每个领导的上级设置好

//实例化具体领导者
Director director = new Director();
Manager manager = new Manager();
Boss boss = new Boss();
//设置每个领导者的上级
director.nextHandler=manager;
manager.nextHandler=boss;
//发起报账请求,可以从director请求,也可以越过他,在现实生活中这是准许的。
//因为你明知道有些主管报不了,或者主管不在了,你肯定得找上一级
// manager.nextHandler=boss;
director.handleRequest(50000);

总结

我想如果不用设计模式这种来做的话,我们的代码肯定非常难看,你可以自己实践一下,其实学习设计模式我都推崇在学这种模式领会了含义之后,你用自己原来的方式实现一次,再去按照设计模式的思想实现一次,你就会体会他有哪儿好了,很明显所有的设计模式都有的优点解耦、代码灵活,当然最大的缺点你们也看到了,需要一层层传递,如果这个关系链特别长的话,每次请求都挺消耗性能的。

猜你喜欢

转载自blog.csdn.net/HJsir/article/details/80298791