美文网首页
责任链模式

责任链模式

作者: joeylong | 来源:发表于2021-04-15 19:39 被阅读0次
    1、责任链模式定义:

    当有请求处理时,可将请求沿着链路传递,直到有对象处理为止。

    2、责任链模式优点:

    每个类单一处理自己的职责,不该处理的传给下一个对象处理,明确范围职责。

    3、责任链模式结构:
    • 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
    • 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
    • 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
    4、代码
    /**
     * 抽象处理者
     */
    @Data
    abstract class  Employees {
        private Employees next;
        public Employees getNext() {
            return next;
        }
        //处理请求的方法
        public abstract void handleRequest(int day);
    }
    /**
     * 具体处理者
     */
    public class Manager extends Employees {
    
        @Override
        public void handleRequest(int day) {
            if(day <= 5){
                System.out.println("经理审批");
            } else {
                System.out.println("经理无法审批,下一个");
                if(getNext() != null){
                    getNext().handleRequest(day);
                }else {
                    System.out.println("请假天数太多,没有人批准该假条!");
                }
            }
        }
    }
    /**
     * 具体处理者
     */
    public class GroupLeader extends Employees {
        @Override
        public void handleRequest(int day) {
            if(day <= 2){
                System.out.println("组长审批");
            } else {
                System.out.println("组长无法审批,下一个");
                if(getNext() != null){
                    getNext().handleRequest(day);
                }else {
                    System.out.println("请假天数太多,没有人批准该假条!");
                }
            }
        }
    }
    /**
     * 测试
     */
    public class responsibilityTest {
        public static void main(String[] args) {
            Employees groupLeader = new GroupLeader();
            Employees manager = new Manager();
            groupLeader.setNext(manager);
            groupLeader.handleRequest(8);
        }
    }
    

    相关文章

      网友评论

          本文标题:责任链模式

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