策略模式:
人们出行有很多种方式:高铁,飞机,汽车等等,每一种方式就是一种策略
需要一个接口或者抽象类
还有类的具体实现
还有环境类
public abstract class AbstractTeacherRealTimeStatistics {//NOSONAR
/**
* 实时统计
*
* @param teExtendStatistics
*/
public abstract void doRealTimeStatistic(TeExtendStatistics teExtendStatistics);
}
抽象类 AbstractTeacherRealTimeStatistics
public class RealCalculateContext implements InitializingBean {
@Autowired
private ApplicationContext context;
private static final Map<FieldOpType, String> STRATEGY_MAP = Maps.newConcurrentMap();
public static void initStrategy() {
STRATEGY_MAP.put(FieldOpType.SHARE, TeTeacherShareCollectStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.COLLECT, TeTeacherShareCollectStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.PRAISE, TeTeacherShareCollectStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.SCORE, TeTeacherScoreStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.FINISH, TeTeacherFinishStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.COURSE, TeTeacherCourseStatistic.class.getName());
STRATEGY_MAP.put(FieldOpType.TASK, TeTeacherCourseLiveStatistics.class.getName());
STRATEGY_MAP.put(FieldOpType.EVALUATE, TeTeacherEvaluateStatistics.class.getName());
}
public AbstractTeacherRealTimeStatistics getStrategy(FieldOpType type) {
if (!STRATEGY_MAP.containsKey(type)) {
return null;
}
try {
return (AbstractTeacherRealTimeStatistics) context.getBean(Class.forName(STRATEGY_MAP.get(type)));
} catch (ClassNotFoundException e) {
log.error("[实时计算]--获取计算策略时错误");
}
return null;
}
@Override
public void afterPropertiesSet() throws Exception {
initStrategy();
}
}
策略控制类
public class TeTeacherFinishStatistics extends AbstractTeacherRealTimeStatistics {
@Override
public void doRealTimeStatistic(TeExtendStatistics teExtendStatistics) {
}
}
具体方法实现