Java的责任链模式

代码

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);
	}
}

猜你喜欢

转载自blog.csdn.net/hrw1234567890/article/details/82219666