责任链模式

在这里插入图片描述
请假流程demo

package chain;

public class LeaveInfo {
	
	String name;
	
	int days;
	
	public LeaveInfo(String name, int days) {
		super();
		this.name = name;
		this.days = days;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getDays() {
		return days;
	}
	public void setDays(int days) {
		this.days = days;
	}
	
}

package chain;

public abstract class AbstractLeaderHandler {
	
	public static final int LEVEL_ONE=3;
	
	public static final int LEVEL_TWO=10;
	
	public static final int LEVEL_THREE=30;
	
	String name;
	
	String title;
	
	public AbstractLeaderHandler(String name, String title) {
		super();
		this.name = name;
		this.title = title;
	}

	AbstractLeaderHandler nextLeaderHandler;

	public AbstractLeaderHandler getNextLeaderHandler() {
		return nextLeaderHandler;
	}

	public void setNextLeaderHandler(AbstractLeaderHandler nextLeaderHandler) {
		this.nextLeaderHandler = nextLeaderHandler;
	}

	//具体处理逻辑留给子类实现
	public abstract void handleLeaveInfo(LeaveInfo leaveInfo);

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
	
	
}

package chain;

public class LittleLeaderHandler extends AbstractLeaderHandler{

	public LittleLeaderHandler(String name, String title) {
		super(name, title);
	}

	@Override
	public void handleLeaveInfo(LeaveInfo leaveInfo) {
		if(leaveInfo.getDays()<=LEVEL_ONE) {
			System.out.println(String.format("%s%s审批结束,同意%s请假%d天",getTitle(),getName(),leaveInfo.getName(),leaveInfo.getDays()));
		}else {
			if(nextLeaderHandler!=null) {
				nextLeaderHandler.handleLeaveInfo(leaveInfo);
			}else {
				System.out.println(String.format("%s请假申请审批流程结束,审批结果为:%s,你是不是不想干了!",leaveInfo.getName(),leaveInfo.getName()));
			}
		}
	}

}

package chain;

public class MiddleLeaderHandler extends AbstractLeaderHandler{

	public MiddleLeaderHandler(String name, String title) {
		super(name, title);
	}

	@Override
	public void handleLeaveInfo(LeaveInfo leaveInfo) {
		if(leaveInfo.getDays()>LEVEL_ONE && leaveInfo.getDays()<=LEVEL_TWO) {
			System.out.println(String.format("%s%s审批结束,同意%s请假%d天",getTitle(),getName(),leaveInfo.getName(),leaveInfo.getDays()));
		}else {
			if(nextLeaderHandler!=null) {
				nextLeaderHandler.handleLeaveInfo(leaveInfo);
			}else {
				System.out.println(String.format("%s请假申请审批流程结束,审批结果为:%s,你是不是不想干了!",leaveInfo.getName(),leaveInfo.getName()));
			}
		}
		
	}

}

package chain;

public class HugeLeaderHandler extends AbstractLeaderHandler{

	public HugeLeaderHandler(String name, String title) {
		super(name, title);
	}

	@Override
	public void handleLeaveInfo(LeaveInfo leaveInfo) {
		if(leaveInfo.getDays()>LEVEL_TWO && leaveInfo.getDays()<=LEVEL_THREE) {
			System.out.println(String.format("%s%s审批结束,同意%s请假%d天",getTitle(),getName(),leaveInfo.getName(),leaveInfo.getDays()));
		}else {
			if(nextLeaderHandler!=null) {
				nextLeaderHandler.handleLeaveInfo(leaveInfo);
			}else {
				System.out.println(String.format("%s请假申请审批流程结束,审批结果为:%s,你是不是不想干了!",leaveInfo.getName(),leaveInfo.getName()));
			}
		}
		
	}

}

package chain;

public class ChainTest {
	public static void main(String[] args) {
		
		//创建领导对象
		AbstractLeaderHandler littleLeaderHandler=new LittleLeaderHandler("旗木五五开","小队长");
		AbstractLeaderHandler middleLeaderHandler=new MiddleLeaderHandler("自来也","三忍之一");
		AbstractLeaderHandler hugeLeaderHandler=new HugeLeaderHandler("纲手","火影");
		
		//创建责任链
		littleLeaderHandler.setNextLeaderHandler(middleLeaderHandler);
		middleLeaderHandler.setNextLeaderHandler(hugeLeaderHandler);
		
		//创建加单
		LeaveInfo leaveInfo1=new LeaveInfo("呐撸多",2);
		LeaveInfo leaveInfo2=new LeaveInfo("撒裤拉酱",5);
		LeaveInfo leaveInfo3=new LeaveInfo("佐井",15);
		LeaveInfo leaveInfo4=new LeaveInfo("啥是gay",2000000);
		
		//全部由直线领导处理,具体有没有审批权限就是责任链需要完成的事了
		littleLeaderHandler.handleLeaveInfo(leaveInfo1);
		littleLeaderHandler.handleLeaveInfo(leaveInfo2);
		littleLeaderHandler.handleLeaveInfo(leaveInfo3);
		littleLeaderHandler.handleLeaveInfo(leaveInfo4);
		
	}
}

打印结果:
小队长旗木五五开审批结束,同意呐撸多请假2天
三忍之一自来也审批结束,同意撒裤拉酱请假5天
火影纲手审批结束,同意佐井请假15天
啥是gay请假申请审批流程结束,审批结果为:啥是gay,你是不是不想干了!

小结:
1.责任链模式:符合谁的权限就由谁处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值