美文网首页
java设计模式-责任链模式

java设计模式-责任链模式

作者: 酷癫 | 来源:发表于2020-04-01 22:12 被阅读0次

    定义

    责任链模式是通过很多对象以及对象的下家引用组成的一条链,请求在这条链上传递,直到有对象处理请求,请求的发送者并不知道链上的哪个对象处理的请求,避免发送者和接受者之间的耦合关系,责任链模式的结构如下:

    image.png

    应用场景

    假如一个普通员工发起一个请假申请,当请假天数小于3天,只需主管审批;3天到7天,需要经理审批;当请假大于7天,需要总经理审批。
    通过责任链模式实现请假流程的代码如下:
    请假对象:

    @Data
    public class LeaveRequest {
    
        private String name;
    
        private int dates;
    
        private String reason;
    
        public LeaveRequest(String name, int dates, String reason) {
            this.name = name;
            this.dates = dates;
            this.reason = reason;
        }
    }
    

    处理请假抽象类:

    public abstract class AbstractHandler {
    
        protected AbstractHandler nextHandler;
    
        protected abstract void handler(LeaveRequest leaveRequest);
    
        protected void setNextHandler(AbstractHandler handler){
            this.nextHandler = handler;
        }
    }
    

    主管审批请假:

    public class TeamLeaderHandler extends AbstractHandler {
        @Override
        protected void handler(LeaveRequest leaveRequest) {
    
            if (leaveRequest.getDates() < 3) {
                System.out.println("主管同意请假");
                return;
            }
            if (nextHandler != null) {
                nextHandler.handler(leaveRequest);
            }
        }
    }
    

    经理审批请假

    public class ManagerHandler extends AbstractHandler {
        @Override
        protected void handler(LeaveRequest leaveRequest) {
    
            if (leaveRequest.getDates() >= 3 && leaveRequest.getDates() < 7) {
                System.out.println("经理同意请假");
                return;
            }
            if (nextHandler != null) {
                nextHandler.handler(leaveRequest);
            }
        }
    }
    

    总经理审批请假

    public class TopManagerHandler extends AbstractHandler {
        @Override
        protected void handler(LeaveRequest leaveRequest) {
            if (leaveRequest.getDates() >= 7) {
                System.out.println("总经理同意请假");
                return;
            }
            if (nextHandler != null) {
                nextHandler.handler(leaveRequest);
            }
        }
    }
    

    发起请假请求

    public class Client {
    
        public static void main(String[] args) {
            ManagerHandler managerHandler = new ManagerHandler();
            TeamLeaderHandler teamLeaderHandler = new TeamLeaderHandler();
            TopManagerHandler topManagerHandler = new TopManagerHandler();
    
            teamLeaderHandler.setNextHandler(managerHandler);
            managerHandler.setNextHandler(topManagerHandler);
    
            LeaveRequest leaveRequest  = new LeaveRequest("张三",1,"回家");
            teamLeaderHandler.handler(leaveRequest);
        }
    }
    

    结果:
    请假1天:主管同意请假
    请假5天:经理同意请假
    请假8天:总经理同意请假

    责任链模式优点

    1.实现请求的发送者和接受者松耦合
    2.职责分明,每个对象只需要专注处理自己的事情
    3.对象可灵活添加或者删除,以及改变对象的顺序

    相关文章

      网友评论

          本文标题:java设计模式-责任链模式

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