java设计模式之责任链模式

package chainOfResp;
/**
* 封装请假的基本信息
* @author zzdxw
*
*/
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 chainOfResp;
/**
* 抽象类各个层次主任类经理类 总经理类分别继承改抽奖类。实现抽象方法
* @author zzdxw
*
*/
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 chainOfResp;
/**
* 主任类
* @author zzdxw
*
*/
public class Director extends Leader{

public Director(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void handleRequest(LeaveRequest request) {
// TODO Auto-generated method stub
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);
}
}
}

}

//经理类实现该抽象方法但是主任类的权限仅能满足十天假期

//如果员工请假十天天之上那经理没有权限审批需要到下一个层次总经理类进行判断审批

package chainOfResp;
/**
* 经理类
* @author zzdxw
*
*/
public class Manager extends Leader{

public Manager(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void handleRequest(LeaveRequest request) {
// TODO Auto-generated method stub
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);
}
}
}

}

//此类是管理级别的最高权限,如果大于10需要总经理进行同意。

package chainOfResp;
/**
* 总经理类
* @author zzdxw
*
*/
public class GeneraManager extends Leader{

public GeneraManager(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void handleRequest(LeaveRequest request) {
// TODO Auto-generated method stub
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()+"天");
}
}

}

//客户端进行测试

public class Client {
public static void main(String[] args) {
Leader a=new Director("张三");
Leader b=new Manager("李四");
Leader c=new GeneraManager("王五");
//设置责任类对象的关系
a.setNextLeader(b);
b.setNextLeader(c);
//开始请假操作
LeaveRequest req1=new LeaveRequest("zzdxw",10,"结婚");
a.handleRequest(req1);
}
}

原文地址:https://www.cnblogs.com/cyz110/p/6516725.html