23模式之: 责任链模式demo

请假信息类:

package chain_of_responsibility_mode;

/**
 * 封装请假的基本信息类
 */
public class LeaveInfo {
    
    private String empName;
    private int leaveDays;
    private String reason;
    
    public LeaveInfo(String empName, int leaveDays, String reason) {
        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 chain_of_responsibility_mode;

/**
 * 领导抽象类
 */
public abstract class Leader {

    protected String name;//姓名
    protected Leader nextLeader;//责任链上的后继对象
    
    public Leader(String name){
        this.name = name;
    }

    
    /**
     * 设置责任链上的后继对象
     */
    public void setNextLeader(Leader nextLeader) {
        this.nextLeader = nextLeader;
    }
    
    
    /**
     * 处理业务的核心方法
     */
    public abstract void handleLeave(LeaveInfo leaveInfo);
    
}

 

主任类:

package chain_of_responsibility_mode;

/**
 * 主任类
 */
public class Director extends Leader{

    
    /**
     * 初始化父类(传入姓名)
     */
    public Director(String name) {
        super(name);
    }

    
    /**
     * 处理业务的核心方法, 对请假信息进行处理
     */
    @Override
    public void handleLeave(LeaveInfo 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.handleLeave(request);
            }
        }
    }

}

 

经理类:

package chain_of_responsibility_mode;

/**
 * 经理类
 */
public class Manager extends Leader{

    
    /**
     * 初始化父类(传入姓名)
     */
    public Manager(String name) {
        super(name);
    }

    
    /**
     * 处理业务的核心方法, 对请假信息进行处理
     */
    @Override
    public void handleLeave(LeaveInfo 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.handleLeave(request);
            }
        }
    }
    
}

 

副总经理类:

package chain_of_responsibility_mode;

/**
 * 副总经理类
 */
public class ViceGeneralManager extends Leader{
    
    
    /**
     * 初始化父类(传入姓名)
     */
    public ViceGeneralManager(String name) {
        super(name);
    }

    
    /**
     * 处理业务的核心方法, 对请假信息进行处理
     */
    @Override
    public void handleLeave(LeaveInfo request) {
        if (request.getLeaveDays() < 20) {
            System.out.println("员工: " + request.getEmpName() + "请假,天数: " + request.getLeaveDays() + ",理由: " + request.getReason());
            System.out.println("副总经理: " + this.name + ",审批通过!");
        }else {
            if (this.nextLeader!=null) {//如果有后继对象, 让后继对象继续处理
                this.nextLeader.handleLeave(request);
            }
        }
    }
    
}

 

总经理类:

package chain_of_responsibility_mode;

/**
 * 总经理类
 */
public class GeneralManager extends Leader{

    
    /**
     * 初始化父类(传入姓名)
     */
    public GeneralManager(String name) {
        super(name);
    }

    
    /**
     * 处理业务的核心方法, 对请假信息进行处理
     */
    @Override
    public void handleLeave(LeaveInfo 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() + "天!");
        }
    }
    
}

 

测试类:

package chain_of_responsibility_mode;

public class Client {

    public static void main(String[] args) {
        //主任
        Leader director = new Director("张三");
        //经理
        Leader manager = new Manager("李四");
        //副总经理
        Leader viceGeneralManager = new ViceGeneralManager("李小四");
        //总经理
        Leader generalManager = new GeneralManager("王五");
        //也可以存到容器里,并进行遍历,一样
        
        
        //组织责任链对象的关系
        
        director.setNextLeader(manager);//主任的上司: 经理
        manager.setNextLeader(viceGeneralManager);//经理的上司: 副总经理
        viceGeneralManager.setNextLeader(generalManager);//副总经理的上司: 总经理
        
        
        //开始请假操作
        LeaveInfo leave = new LeaveInfo("Tom", 15, "去美国探亲!");
        director.handleLeave(leave);//先由低层开始处理, 可以处理就处理, 请假15天应该由副总经理处理, 看看结果!
    }
    
}

 

执行结果:

员工: Tom请假,天数: 15,理由: 去美国探亲!
副总经理: 李小四,审批通过!

 

 

谢谢声明出处!

转自: http://www.cnblogs.com/gscq073240/articles/7107043.html

 

转载于:https://www.cnblogs.com/gscq073240/articles/7107043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值