JAVA设计模式之责任链模式

来源:互联网 发布:篡改或者伪造监测数据 编辑:程序博客网 时间:2024/06/02 06:01

抽象类

以员工请假为例,演示责任链模式

package com.imust.chainOfResp;/** * 抽象类 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */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;    }    /**     * 处理请求的核心的业务方法     */    public abstract void handleRequest(LeaveRequest request);}
package com.imust.chainOfResp;/*8 * 封装请假的基本信息 */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;    }}
package com.imust.chainOfResp;/** * 主任 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */public class Director extends Leader{    public Director(String name) {        super(name);    }    @Override    public void handleRequest(LeaveRequest request) {        if(request.getLeaveDays()<3){            System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由");            System.out.println("主任"+this.name+"通过");        }else{            if(this.nextLeader != null){                this.nextLeader.handleRequest(request);;            }        }    }}
package com.imust.chainOfResp;/** * 经理 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.chainOfResp */public class Manager extends Leader{    public Manager(String name) {        super(name);    }    @Override    public void handleRequest(LeaveRequest request) {         if(request.getLeaveDays()<10){            System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由");            System.out.println("经理"+this.name+"通过");        }else{            if(this.nextLeader != null){                this.nextLeader.handleRequest(request);;            }        }    }}

package com.imust.chainOfResp;

/**
* 总经理
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月8日
* @project shejimoshi
* @package com.imust.chainOfResp
*/
public class GeneralManager extends Leader{

public GeneralManager(String name) {    super(name);}@Overridepublic void handleRequest(LeaveRequest request) {     if(request.getLeaveDays()<10){        System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由");        System.out.println("总经理"+this.name+"通过");    }else{        System.out.println("莫非"+request.getEmpName()+"想辞职,居然请假"+request.getLeaveDays());    }}

}

package com.imust.chainOfResp;

/**
* 副总经理
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月8日
* @project shejimoshi
* @package com.imust.chainOfResp
*/
public class ViceGeneralManager extends Leader{

public ViceGeneralManager(String name) {    super(name);}@Overridepublic void handleRequest(LeaveRequest request) {     if(request.getLeaveDays()<20){        System.out.println("员工"+request.getEmpName()+"请假"+request.getReason()+"理由");        System.out.println("副总经理"+this.name+"通过");    }else{        if(this.nextLeader != null){            this.nextLeader.handleRequest(request);        }    }}

}

测试类如下

package com.imust.chainOfResp;

public class Client {

public static void main(String[] args) {    Leader a = new Director("张三");    Leader b = new Manager("李四");    Leader c = new GeneralManager("王五");    Leader b2 = new ViceGeneralManager("李小四");    //组织责任链对象的关系    a.setNextLeader(b);    b.setNextLeader(b2);    b2.setNextLeader(c);    //开始请假操作    LeaveRequest req1 = new LeaveRequest("TOM", 10, "回老家探亲");    a.handleRequest(req1);}

}
“`

原创粉丝点击