策略模式 + 责任链模式 + 组合转发练习

/**
 * @author yaoqiang
 * @create 2018-12-12 23:40
 * @desc 员工信息
 **/
@Data
public class Employee {
    private int id;
    private String name;
    private int score;
}
/**
 * @author yaoqiang
 * @create 2018-12-12 23:35
 * @desc 请求,请假单信息
 **/
@Data
public class Request {
    private int id;
    private StringBuilder context;
    private Employee employee;
    private String reason;
    private int day;
}
/**
 * @author yaoqiang
 * @create 2018-12-12 23:37
 * @desc 领导抽象
 **/
public abstract class Leader {
    private final EmployeeStrategy strategy;
    private Leader next;

    public Leader(EmployeeStrategy strategy){
        this.strategy = strategy;
    }

    public Leader setNext(Leader l){
        next = l;
        return this;
    }


    public boolean check(Request r){
        boolean result = strategy.yesOrNo(r);
        if(result) {
            writeSuccessMessage(r.getContext());
            return next.check(r);
        }else{
            writeFailMessage(r.getContext());
            return false;
        }

    }

    private  void writeSuccessMessage(StringBuilder builder){
        builder.append(getClass() + strategy.getSuccessReson());
    }

    private  void writeFailMessage(StringBuilder builder){
        builder.append(getClass() + strategy.getFailReson());
    }
}
/**
 * @author yaoqiang
 * @create 2018-12-12 23:40
 * @desc 请求策略接口
 **/
public interface EmployeeStrategy {

    boolean yesOrNo(Request r);

    String getSuccessReson();

    String getFailReson();
}
public enum EmployeeStrategyEnums implements EmployeeStrategy{
    MANAGER(Type.BAD),
    GROUP_LEADER(Type.NOMAL);

    private final EmployeeStrategy strategy;

    EmployeeStrategyEnums(EmployeeStrategy strategy){
        this.strategy =strategy;
    }



    @Override
    public boolean yesOrNo(Request r){
        return strategy.yesOrNo(r);
    }

    @Override
    public String getSuccessReson() {
        return strategy.getSuccessReson();
    }

    @Override
    public  String getFailReson(){
        return strategy.getFailReson();
    }

    enum Type implements EmployeeStrategy{
        NOMAL{
            @Override
            public boolean yesOrNo(Request r) {
                return r.getEmployee().getScore() > 70 && r.getDay() < 7?true:false;
            }

            @Override
            public String getFailReson() {
                return "分数不到70,天数超过6天";
            }
        },
        BAD{
            @Override
            public boolean yesOrNo(Request r) {
                return r.getEmployee().getScore() > 90 && r.getDay() < 7?true:false;
            }

            @Override
            public String getFailReson() {
                return "分数不到90,天数超过6天";
            }
        };

        @Override
        public abstract boolean yesOrNo( Request r);

        @Override
        public String getSuccessReson() {
            return "同意,早去早回";
        }

        @Override
        public abstract String getFailReson();


    }



}
/**
 * @author yaoqiang
 * @create 2018-12-12 23:52
 * @desc 组长
 **/
public class GroupLeader extends Leader {

    public GroupLeader(EmployeeStrategy strategy) {
        super(strategy);
    }

}
/**
 * @author yaoqiang
 * @create 2018-12-12 23:56
 * @desc 经理
 **/
public class Manager extends Leader{

    public Manager(EmployeeStrategy strategy) {
        super(strategy);
    }

}
/**
 * @author yaoqiang
 * @create 2018-12-13 0:18
 * @desc demo
 **/
public class Demo {
    public static void main(String[] args) {
        Leader l = new GroupLeader(GROUP_LEADER).setNext(new Manager(MANAGER));
        Request r = new Request();
        Employee e = new Employee();
        e.setId(123);
        e.setName("张三");
        e.setScore(80);
        r.setDay(6);
        r.setId(1);
        r.setReason("事假");
        r.setEmployee(e);
        r.setContext(new StringBuilder("有事"));
        boolean result = l.check(r);
        if(result)
            System.out.println("success" + r.getContext());
        else
            System.out.println("fail" + r.getContext());

    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值