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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值