责任链模式
/**
* 责任链的抽象类(所有领导的基类)
*/
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 handerRequest(LeaveRequest request);
}
/**
* 请假的对象
*/
public class LeaveRequest {
private String empName;//员工姓名
private int days;//请假天数
private String reson;//请假原因
public LeaveRequest(String empName, int days, String reson) {
this.empName = empName;
this.days = days;
this.reson = reson;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int getDays() {
return days;
}
public void setDays(int days) {
this.days = days;
}
public String getReson() {
return reson;
}
public void setReson(String reson) {
this.reson = reson;
}
}
/**
* 主任
*/
public class Director extends Leader {
public Director(String name) {
super(name);
}
@Override
public void handerRequest(LeaveRequest request) {
//请假三天小于三天,直属上司直接审批
if (request.getDays() < 3) {
System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
System.out.println("主任:"+this.name+"审批通过了!!!!!");
} else {
if (nextLeader != null) {
nextLeader.handerRequest(request);
}
}
}
}
/**
* 经理
*/
public class Manager extends Leader {
public Manager(String name) {
super(name);
}
@Override
public void handerRequest(LeaveRequest request) {
//请假三天小于三天,直属上司直接审批
if (request.getDays() < 10) {
System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
System.out.println("经理:"+this.name+"审批通过了!!!!!");
} else {
if (nextLeader != null) {
nextLeader.handerRequest(request);
}
}
}
}
/**
* 总经理
*/
public class GeneralManager extends Leader {
public GeneralManager(String name) {
super(name);
}
@Override
public void handerRequest(LeaveRequest request) {
//请假三天小于三天,直属上司直接审批
if (request.getDays() < 30) {
System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
System.out.println("总经理:" + this.name + "审批通过了!!!!!");
} else {
System.out.println("总经理:难道" + request.getEmpName() + "不想干了,居然请假了" + request.getDays()+"天");
}
}
}
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 leaveRequest = new LeaveRequest("Tom",40,"世界那么大,我想去看看");
a.handerRequest(leaveRequest);
}
}