责任链模式

package ChainOfResponsibility;
/***
 * 封装请假基本信息
 * 
 * @author zw
 *
 */
public class LeaveRequest {
	private String empName;
	private int leaveDays;
	private String 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;
	}
	public LeaveRequest(String empName, int leaveDays, String reason) {
		super();
		this.empName = empName;
		this.leaveDays = leaveDays;
		this.reason = reason;
	}
	public LeaveRequest() {
		super();
	}
	
	
	
	
}


package ChainOfResponsibility;
/***
 * 抽象类 
 */
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;
	}
	
	/***
	 * 处理请求的核心业务方法 
	 * @param request
	 */
	public abstract void handleRequest(LeaveRequest request);
	
}




package ChainOfResponsibility;
/***
 * 主任
 * @author zw
 *
 */
public class Director extends Leader{

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

	@Override
	public void handleRequest(LeaveRequest request) {
		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 ChainOfResponsibility;
/***
 * 经理
 * @author zw
 *
 */
public class Manager extends Leader{

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

	@Override
	public void handleRequest(LeaveRequest request) {
		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);
			}
		}
	}

}

package ChainOfResponsibility;
/***
 * 总经理
 * @author zw
 *
 */
public class GeneralManager extends Leader{

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

	@Override
	public void handleRequest(LeaveRequest request) {
		if(request.getLeaveDays()<30) {
			System.out.println("员工:"+request.getEmpName()+",请假:"+request.getLeaveDays()+"天,理由是:"+request.getReason());
			System.out.println("总经理:"+this.name+",审批通过!");
		}else {
			System.out.println("大于三十天不通过,该员工有异常表现!");
		}
	}

}


package ChainOfResponsibility;

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 r1 = new LeaveRequest("张华", 50, "回老家探亲!");
		a.handleRequest(r1);
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值