设计模式--责任链

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);
    }

}

 

posted @ 2014-07-27 19:08  _Venom_  阅读(217)  评论(0编辑  收藏  举报