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

/** * @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; }}privatevoid writeSuccessMessage(StringBuilder builder){ builder.append(getClass() + strategy.getSuccessReson()); }privatevoid 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 publicString 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()); } }

【Design|策略模式 + 责任链模式 + 组合转发练习】

    推荐阅读