菜鸡 Java 求一个解决方案。

1 天前
 t298

我们是做水利模型的业务的,大家可以理解为一条河流,从上游到下游有若干个水库,水电站什么的,现在像这样的有 19 个,可以理解为一个水库就是一个模型。 现在要灵活的决定那些参与计算,那些不参与计算,比如 c 水库参与计算,那么后面的 d 就要用 c 的结果,如果不参与计算,那么 d 用的就是上一个 b 的结果,以此类推,这个应该怎么设计?

545 次点击
所在节点    问与答
7 条回复
JoeDH
1 天前
Pipeline 模式
nice2cu
1 天前
咋感觉可以用一个 19 位的二进制表示,通过移位判断下一个 1 ,即开启的,然后参与计算
nice2cu
1 天前
@nice2cu 或者 19 个入库,根据 sort 排序 依次找到下一个开启的 然后做处理 感觉都行的吧 处理方法简单一点就
while(hasNext()){
operate()
}
orzorzorzorz
1 天前
获得上一个水库结果 -> 在当前水库判断是否使用上游数据,最后生成结果,或计算,或使用上游数据 -> 获得上一个水库结果 -> ...
递归完事。
yosoroAida
1 天前
赞同用 1 楼的,你可以看看责任链模式的例子,例如 Java web 的 Filter 是怎么组装的,它的组装其实就是 Pipeline 模式的例子
manhere
1 天前
不必那么复杂,直接做成顺序的就行,如果 c 不参与计算,则 c 直接返回 b 的结果做个短路就行。
yosoroAida
1 天前
或者你也考虑下用装饰器模式,具体例子就是 MyBatis 的 <where> ,<if> 这些标签是怎么连起来的:

SqlNode 接口的还有它的实现类,还有 DynamicSqlSource 的 getBoundSql() 的方法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1090548

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX