/*
User类
请假人类:
请假天数
姓名
*/
@Data
public class User {
private String name;
private int day;
public User(String name, int day) {
this.name = name;
this.day = day;
}
}
///HandLer :实现期限定义 ,提供方法:跳转下一个对象,提供多态方法实现多个实现类的逻辑
@Data
public abstract class HandLer {
protected final int one=1;
protected final int five=5;
protected final int seven=7;
//利用多态,根据不同情况实现不同对象,默认最小
protected HandLer han;
//h:上级
protected void jump(HandLer h,User use){
han=h;
han.Leave(use);
if(h==null){
System.out.println("辞职");
}
}
//不同实现类逻辑
public abstract void Leave(User use);
3个实现类:
public class HandLerA extends HandLer{
@Override
public void Leave(User use) {
//
if(use.getDay()>super.one){
super.jump(new HandLerB(),use);
return;
}
System.out.println(this.getClass()+"已经批准,你"+use.getDay()+"天假期");
}
public class HandLerB extends HandLer{
@Override
public void Leave(User use) {
//
if(super.five<use.getDay()){
super.jump(new HandLerC(),use);
return;
}
System.out.println(this.getClass()+"已经批准,你"+use.getDay()+"天假期");
}
public class HandLerC extends HandLer{
@Override
public void Leave(User use) {
//
if(use.getDay()>super.seven){
super.jump(null,use);
return;
}
System.out.println(this.getClass()+"已经批准,你"+use.getDay()+"天假期");
}
测试类
HandLer h=new HandLerA();
h.Leave(new User("更改",6));
}