【发布时间】:2017-08-23 11:19:13
【问题描述】:
基于 SO 上的各种线程(例如 Replacing if else statement with pattern ),我知道我可以用 Command 模式替换多个 if\else 语句。
我的情况有点不同。
我有一系列Commands,只有在上一个命令不成功的情况下,我才需要执行每个Command。
例如,假设我需要从假设的网页中检索文本 - 我可以使用屏幕抓取直接从页面中抓取文本,或者我可以从 API 获取文本。如果屏幕抓取不成功,我只想从 API 获取文本。换句话说,如果“scrape”命令不起作用,我只会执行“fetch”命令。
在这种情况下,我会测试抓取的 String 是否为空或等于 null,然后执行第二个 Command。如果第二个命令也不成功,我会执行第三个命令,依此类推。
重要的一点是,如果某个条件为真/假,我们只执行后续命令。每个命令的条件始终相同,但将来命令的数量可能会增加。
我无法通过通常建议的路线(使用Map 和Command 接口)实现这一点,因为如果第一个失败,这将不会执行下一个Command(它也无法检查@ 987654329@是否成功)
什么设计模式可以用来解决这个问题?
【问题讨论】:
-
如果条件是命令固有的:运行命令,使其返回
true成功。将所有命令放在一个列表中,运行该列表中的所有命令,直到第一个成功。不幸的是,Java Stream 没有takeWhile()。
标签: java if-statement design-patterns conditional