美文网首页
设计模式---责任链(Iterator pattern)

设计模式---责任链(Iterator pattern)

作者: RalapHao | 来源:发表于2017-09-29 15:29 被阅读0次

    介绍

    多个对象都可以处理请求,将这些对象连成一条链,并沿着这条链传递该请求,直到对象处理完成。

    应用场景

    多个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定

    UML

    UML.png

    举例说明

    员工有2万要报销,首先找组长报销,但是是组长最大处理额度为1000,所以组长找主管报销,主管只能报5000以内,主管找经理,但是经理也只能在1万以内,最后经理找老板,老板处理了,这就是一个责任链的应用场景。

    代码实现

    领导抽象类

    public abstract class Leader {
    
        /**
         * 上一级处理者
         */
        protected Leader nextHandler;
    
        public final void handleRequest(int money) {
    
            if(money>limit()){
                nextHandler.handleRequest(money);
            }else{
                handle(money);
            }
        }
    
    
        /**
         * 自身能处理的最大额度
         */
        public abstract int limit();
    
        /**
         * 处理行为
         */
        public abstract void handle(int money);
    
    }
    

    组长

    public class GroupLeader extends Leader {
    
        @Override
        public int limit() {
            return 1000;
        }
    
        @Override
        public void handle(int money) {
            System.out.println("组长审批金额" + money + "元");
        }
    }
    

    主管

    public class Director extends Leader {
    
        @Override
        public int limit() {
            return 5000;
        }
    
        @Override
        public void handle(int money) {
            System.out.println("主管审批金额" + money + "元");
        }
    }
    

    经理

    public class Manager extends Leader {
    
        @Override
        public int limit() {
            return 10000;
        }
    
        @Override
        public void handle(int money) {
            System.out.println("经理审批金额" + money + "元");
        }
    }
    

    老板

    public class Boss extends Leader {
    
        @Override
        public int limit() {
            return Integer.MAX_VALUE;
        }
    
        @Override
        public void handle(int money) {
            System.out.println("老板审批金额" + money + "元");
        }
    }
    

    测试

     public static void main(String[] args) {
            GroupLeader group = new GroupLeader();
            Director director = new Director();
            Manager manager = new Manager();
            Boss boss = new Boss();
            group.nextHandler = director;
            director.nextHandler = manager;
            manager.nextHandler = boss;
    
            group.handleRequest(7000);
            group.handleRequest(2000);
            group.handleRequest(200);
            group.handleRequest(50000);
        }
    

    输出

    输出截图.png

    总结

    责任链就是讲所有能处理请求的对象连成一个链,然后逐个寻找能处理请求的那个对象,就这么简单,
    优点:可以对请求和处理者关系解耦,提高代码的灵活性,
    缺点:需要遍历链,影响性能。

    相关文章

      网友评论

          本文标题:设计模式---责任链(Iterator pattern)

          本文链接:https://www.haomeiwen.com/subject/gmpiextx.html