设计模式之责任链模式 chainOfResp

Posted 大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之责任链模式 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);
    }
}
测试调用

 

以上是关于设计模式之责任链模式 chainOfResp的主要内容,如果未能解决你的问题,请参考以下文章

php设计模式之责任链模式实现举报功能实例代码

设计模式之责任链模式

设计模式之责任链模式20170717

JAVA设计模式之责任链模式

一天学习一个设计模式之责任链模式

Spring 设计模式之责任链模式