根据 SO 上的各种线程(例如 Replacing if else statement with pattern),我了解到可以使用
我的情况有点不同。我有一系列的
例如,假设我需要从一个虚构网页中检索文本 - 我可以直接从页面中抓取文本,也可以从 API 中获取文本。只有在屏幕抓取不成功时,我才想从 API 获取文本。换句话说,如果“scrape”命令不起作用,我才会执行“fetch”命令。
在这种情况下,我将测试抓取的字符串是否为空或等于 null,然后执行第二个命令。如果第二个命令也不成功,则执行第三个命令以此类推。
重要的是,我们只有在某个条件为真/假时才执行后续命令。每个命令的条件始终相同,但将来可能会增加命令的数量。
我无法通过通常建议的路线(使用
有哪种设计模式可用于解决此问题?
Command
模式替换多个 if\else 语句。我的情况有点不同。我有一系列的
Commands
,只有在前一个命令失败时才需要执行每个 Command
。例如,假设我需要从一个虚构网页中检索文本 - 我可以直接从页面中抓取文本,也可以从 API 中获取文本。只有在屏幕抓取不成功时,我才想从 API 获取文本。换句话说,如果“scrape”命令不起作用,我才会执行“fetch”命令。
在这种情况下,我将测试抓取的字符串是否为空或等于 null,然后执行第二个命令。如果第二个命令也不成功,则执行第三个命令以此类推。
重要的是,我们只有在某个条件为真/假时才执行后续命令。每个命令的条件始终相同,但将来可能会增加命令的数量。
我无法通过通常建议的路线(使用
Map
和 Command
接口)来实现此目的,因为这样不会执行下一个 Command
如果第一个失败(它还无法检查 Command
是否成功)。有哪种设计模式可用于解决此问题?
true
。将所有命令放入一个列表中,运行该列表中的所有命令直到第一个成功为止。不幸的是,Java Stream没有takeWhile()
方法。 - dhke