请假流程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.责任链模式:符合谁的权限就由谁处理