zoukankan      html  css  js  c++  java
  • 设计模式之责任链模式 chainOfResp

    后面我们将学习设计模式里面的行为型模式


     代码实现

    /**
     * 抽象类
     * @author bzhx
     * 2017年3月14日
     */
    public abstract class Leader {
    
        protected String name;
        protected Leader nextLeader; //责任链的后继对象
        
        public Leader(String name) {
            super();
            this.name = name;
        }
        //设定责任链上的后继对象
        public void setNextLeader(Leader nextLeader) {
            this.nextLeader = nextLeader;
        }
        
        /**
         * 处理请求的核心业务方法
         * @param request
         */
        public abstract void handleRequest(LeaveRequest request);
    }
    抽象类Leader
    /**
     * 主任
     * @author bzhx
     * 2017年3月14日
     */
    public class Manager extends Leader{
    
        public Manager(String name) {
            super(name);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void handleRequest(LeaveRequest request) {
            if(request.getLeaveDays()<10){
                System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
                System.out.println("经理:"+this.name+",审批通过!");
            }else{
                if(this.nextLeader!=null){
                    this.nextLeader.handleRequest(request);
                }
            }
        }
    
    }
    实现类Manager
    /**
     * 主任
     * @author bzhx
     * 2017年3月14日
     */
    public class Director extends Leader{
    
        public Director(String name) {
            super(name);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void handleRequest(LeaveRequest request) {
            if(request.getLeaveDays()<3){
                System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
                System.out.println("主任:"+this.name+",审批通过!");
            }else{
                if(this.nextLeader!=null){
                    this.nextLeader.handleRequest(request);
                }
            }
        }
    
    }
    实现类 Director
    /**
     * 主任
     * @author bzhx
     * 2017年3月14日
     */
    public class GeneralManager extends Leader{
    
        public GeneralManager(String name) {
            super(name);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void handleRequest(LeaveRequest request) {
            if(request.getLeaveDays()<30){
                System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
                System.out.println("总经理:"+this.name+",审批通过!");
            }else{
                System.out.println("莫非"+request.getEmpName()+"想辞职,居然请假"+request.getLeaveDays()+"天!");
            }
        }
    
    }
    实现类 GeneralManager
    /**
     * 封装请假的基本信息
     * @author bzhx
     * 2017年3月14日
     */
    public class LeaveRequest {
    
        private String empName;
        private int leaveDays;
        private String reason;
        
        public LeaveRequest(String empName, int leaveDays, String reason) {
            super();
            this.empName = empName;
            this.leaveDays = leaveDays;
            this.reason = reason;
        }
    
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        public int getLeaveDays() {
            return leaveDays;
        }
    
        public void setLeaveDays(int leaveDays) {
            this.leaveDays = leaveDays;
        }
    
        public String getReason() {
            return reason;
        }
    
        public void setReason(String reason) {
            this.reason = reason;
        }
        
        
    }
    封装请假的信息
    public class Client {
    
        public static void main(String[] args) {
            Leader a = new Director("张三");
            Leader b = new Manager("李四");
            Leader c = new GeneralManager("王五");
            
            //组织责任链对象的关系
            a.setNextLeader(b);
            b.setNextLeader(c);
            
            //开始请假操作
            LeaveRequest req1 = new LeaveRequest("Tom",5,"回英国探亲");
            a.handleRequest(req1);
        }
    }
    测试调用
  • 相关阅读:
    flask 跨域问题
    pip 命令参数说明
    关于ASP.NET动态加载控件的几点实用总结
    记录代码运行耗时的写法
    DevExpress AspxGridView数据绑定
    发现一个Membership的bug
    asp.net页面中文件下载的2种方式
    【部分转】innerText 跟 innerHTML区别
    gridview 的添加删除等技巧 全部按名称取值
    关于Linq to DataTable not in的写法
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7477902.html
Copyright © 2011-2022 走看看