代码
package ChainOfResposibility;
/*
* 一个关于请假的责任链模式的请假程序
* 封装请假的基本信息
*/
public class LeaveRequest {
private String name;
private int leavedays;
private String reason;
public LeaveRequest(String name,int leavedays,String reason){
super();
this.name=name;
this.leavedays = leavedays;
this.reason = reason;
}
public int getLeaveDays(){
return leavedays;
}
public String getName(){
return name;
}
public String getReason(){
return reason;
}
}
package ChainOfResposibility;
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 handleRequest(LeaveRequest request);
}
package ChainOfResposibility;
public class Director extends Leader {
public Director(String name) {
super(name);
}
public void handleRequest(LeaveRequest request) {
int days = request.getLeaveDays();
String name = request.getName();
String reason = request.getReason();
if(days <= 3) {
System.out.println("员工" + name + "请假" + days + "天,理由:" + reason);
System.out.println("主任" + this.name + "审批通过");
} else {
System.out.println("请假天数过多,主任" + this.name + "没法处理");
if(this.nextLeader != null) { //否则,如果链上存在下一个Leader,就让他处理
this.nextLeader.handleRequest(request);
}
}
}
}
package ChainOfResposibility;
public class Manager extends Leader{
public Manager(String name){
super(name);
}
public void handleRequest(LeaveRequest request){
int days = request.getLeaveDays();
String name = request.getName();
String reason = request.getReason();
if(days<=10){
System.out.println("员工"+name+"请假"+days+"天,理由是"+reason);
System.out.println("经理"+this.name+"审批通过");
}else {
System.out.println("请假天数过多,经理"+this.name+"没法处理");
}
if(this.nextLeader!=null){
this.nextLeader.handleRequest(request);
}
}
}
package ChainOfResposibility;
public class Description extends Leader{
public Description(String name){
super(name);
}
public void handleRequest(LeaveRequest request){
String name = request.getName();
int days = request.getLeaveDays();
String reason = request.getReason();
if(days<=30){
System.out.println("员工"+name+"请假"+days+"天,理由是"+reason);
System.out.println("总经理"+this.name+"审批通过");
}else {
System.out.println("请假天数过多,总经理"+this.name+"没法处理");
if(this.nextLeader!=null){
this.nextLeader.handleRequest(request);
}else {
System.out.println("请假不成功");
}
}
}
}
package ChainOfResposibility;
public class Client {
public static void main(String[] args) {
Leader director = new Director("菜鸡");
Leader manager = new Manager("辣鸡");
Leader description = new Description("翟振强");
//确定责任链关系
director.SetNextLeader(manager);
manager.SetNextLeader(description);
//开始请假操作
LeaveRequest request = new LeaveRequest("郑智愚", 15, "在寝室打游戏");
director.handleRequest(request);
}
}