首页 > 代码库 > 设计模式--责任链

设计模式--责任链

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