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

    Mark:关于责任链Demo。

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。

    类图:

    chain

    请假--审批(转)

    描述:

      

    请假这个事情,相信每个人都不陌生。

    我们公司是个相对很宽松的公司。

    在公司里,如果你的请假时间小于0.5天,那么只需要向项目经理打声招呼就OK了。

    如果超过了0.5天,但是还小于2天,那么就要去找人事部处理,当然,这就要扣工资了。

    如果超过了2天,你就需要去找总经理了,工资当然也玩完了。

    那么,对于我们来说,这个流程就是这样的。

    请求类。(包括请假时间和请假理由)

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    
    public class Request {
        
        private double day;
        
        private String reason;
    
        public Request(int _day, String _reason){
            this.day = _day;
            this.reason = _reason;
        }
        
        public String getReason() {
            return reason;
        }
    
        public void setReason(String reason) {
            this.reason = reason;
        }
        public double getDay() {
            return day;
        }
    
        public void setDay(double day) {
            this.day = day;
        }
    
    }

    请假处理人。PM HR Manager 三个类。

    首先:创建Boss抽象类。

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    public abstract class Boss {
        
        //两个核心的方法
        
        
        private String name;
    
        private Boss successor;
        
        public Boss(String _name){
            this.name = _name;
        }
        
        public abstract boolean passRequest(Request request);
        
        
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    
    
    
        public Boss getSuccessor() {
            return successor;
        }
    
    
    
    
        public void setSuccessor(Boss successor) {
            this.successor = successor;
        }
        
        
    }

    PM,HR,Manager 继承Boss

    PM类:

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    public class PM extends Boss {
    
        public PM(String _name) {
            super(_name);
        }
    
        @Override
        public boolean passRequest(Request request) {
            System.out.println("i'm pm");
            double day = request.getDay();
            String reason = request.getReason();
            if(day <= 0.5){
                return true;
            }
            return getSuccessor().passRequest(request);
        }
    
    }

    HR类:

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    public class HR extends Boss {
    
        public HR(String _name) {
            super(_name);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public boolean passRequest(Request request) {
            System.out.println("i'm hr");
            double day = request.getDay();
            String reason = request.getReason();
            if(day > 0.5 && day <= 2)
                return true;
            return getSuccessor().passRequest(request);
        }
    
    }

    Manager类:

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    public class Manager extends Boss {
    
        public Manager(String _name) {
            super(_name);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public boolean passRequest(Request request) {
            System.out.println("i'm manager");
            double day = request.getDay();
            String reason = request.getReason();
            
            if("正当理由".equals(reason))
                return true;
            return false;
        }
    
    }

    测试类:

    package pattern;
    /** 
     * @author _Venom_ 
     * @version 创建时间:2014年7月27日 下午7:01:14  
     */
    public class TestClain {
    
        public static void main(String[] args) {
            Request request = new Request(3, "非正当理由");
            Boss pm = new PM("pm");
            Boss hr = new HR("hr");
            Boss manager = new Manager("manager");
            pm.setSuccessor(hr);
            hr.setSuccessor(manager);
            boolean pass = pm.passRequest(request);
            System.out.println(pass);
        }
    
    }
  • 相关阅读:
    实验10 使用PBR实现策略路由
    实验9 使用route-policy控制路由
    实验8 filter-policy过滤路由
    实验7 ISIS多区域配置
    实验6 IS-IS基本配置
    MySQL复制表
    mysql数据备份
    mysql 创建用户,授权
    数据库
    mysql 修改文件记录:
  • 原文地址:https://www.cnblogs.com/Venom/p/3871771.html
Copyright © 2011-2022 走看看