我们是做水利模型的业务的,大家可以理解为一条河流,从上游到下游有若干个水库,水电站什么的,现在像这样的有 19 个,可以理解为一个水库就是一个模型。 现在要灵活的决定那些参与计算,那些不参与计算,比如 c 水库参与计算,那么后面的 d 就要用 c 的结果,如果不参与计算,那么 d 用的就是上一个 b 的结果,以此类推,这个应该怎么设计?
1
JoeDH 13 天前
Pipeline 模式
|
2
nice2cu 13 天前
咋感觉可以用一个 19 位的二进制表示,通过移位判断下一个 1 ,即开启的,然后参与计算
|
3
nice2cu 13 天前
|
4
orzorzorzorz 13 天前
获得上一个水库结果 -> 在当前水库判断是否使用上游数据,最后生成结果,或计算,或使用上游数据 -> 获得上一个水库结果 -> ...
递归完事。 |
5
yosoroAida 13 天前
赞同用 1 楼的,你可以看看责任链模式的例子,例如 Java web 的 Filter 是怎么组装的,它的组装其实就是 Pipeline 模式的例子
|
6
manhere 13 天前
不必那么复杂,直接做成顺序的就行,如果 c 不参与计算,则 c 直接返回 b 的结果做个短路就行。
|
7
yosoroAida 13 天前
或者你也考虑下用装饰器模式,具体例子就是 MyBatis 的 <where> ,<if> 这些标签是怎么连起来的:
SqlNode 接口的还有它的实现类,还有 DynamicSqlSource 的 getBoundSql() 的方法。 |