菜鸡 Java 求一个解决方案。

t298 · 2024-11-18 16:54:28 · 825 次点击

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

举报· 825 次点击
登录 注册 站外分享
7 条回复  
JoeDH 小成 2024-11-18 16:57:27
Pipeline 模式
nice2cu 初学 2024-11-18 17:07:52
咋感觉可以用一个 19 位的二进制表示,通过移位判断下一个 1 ,即开启的,然后参与计算
nice2cu 初学 2024-11-18 17:14:20
@nice2cu 或者 19 个入库,根据 sort 排序 依次找到下一个开启的 然后做处理 感觉都行的吧 处理方法简单一点就 while(hasNext()){ operate() }
orzorzorzorz 小成 2024-11-18 17:15:36
获得上一个水库结果 -> 在当前水库判断是否使用上游数据,最后生成结果,或计算,或使用上游数据 -> 获得上一个水库结果 -> ... 递归完事。
yosoroAida 小成 2024-11-18 17:22:03
赞同用 1 楼的,你可以看看责任链模式的例子,例如 Java web 的 Filter 是怎么组装的,它的组装其实就是 Pipeline 模式的例子
manhere 小成 2024-11-18 17:23:47
不必那么复杂,直接做成顺序的就行,如果 c 不参与计算,则 c 直接返回 b 的结果做个短路就行。
yosoroAida 小成 2024-11-18 17:27:51
或者你也考虑下用装饰器模式,具体例子就是 MyBatis 的 这些标签是怎么连起来的: SqlNode 接口的还有它的实现类,还有 DynamicSqlSource 的 getBoundSql() 的方法。
返回顶部