设计模式

image-20260102175706719

先看左侧,

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;
}

扩展规则树模型结构,增加异步数据加载区。将用于试算营销优惠的接口使用异步线程进行加载,之后写入上下文,用于后续的逻辑处理。

这部分的模型设计是非常巧妙的,通过解耦逻辑和划分功能区,让代码具有了文档属性,看到对应的类和类下的方法区,就可以轻松的理解代码实现方式。这样的处理非常有利于后续功能的迭代。

img