设计模式

先看左侧,
1 2 3 4
| 策略路由抽象类 AbstractStrategyRouter T 入参类型 D 上下文参数 R 返参类型
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public abstract class AbstractStrategyRouter<T,D,R> implements StrategyHandler<T,D,R>,StrategyMapper<T, D, R> {
StrategyHandler<T,D,R> defaultStrategyHandler = StrategyHandler.DEFAULT;
public R router(T requestParameter, D dynamicContext) throws Exception { StrategyHandler<T,D,R> strategyHandler = get(requestParameter, dynamicContext); if(null != strategyHandler) { return strategyHandler.apply(requestParameter, dynamicContext); } return defaultStrategyHandler.apply(requestParameter, dynamicContext); }
}
|
其中StrategyMapper不执行,只选择,StrategyHandler不选择,只执行
1 2 3 4 5
| public interface StrategyMapper<T, D, R> {
StrategyHandler<T, D, R> get(T requestParameter, D dynamicContext) throws Exception; }
|
1 2 3 4 5 6
| public interface StrategyHandler<T, D, R> {
StrategyHandler DEFAULT = (T, D) -> null;
R apply(T requestParameter, D dynamicContext) throws Exception; }
|
扩展规则树模型结构,增加异步数据加载区。将用于试算营销优惠的接口使用异步线程进行加载,之后写入上下文,用于后续的逻辑处理。
这部分的模型设计是非常巧妙的,通过解耦逻辑和划分功能区,让代码具有了文档属性,看到对应的类和类下的方法区,就可以轻松的理解代码实现方式。这样的处理非常有利于后续功能的迭代。
