【发布时间】:2023-04-06 18:44:01
【问题描述】:
我越来越多地看到相同解决方案的新标签,但名称不同。在这种情况下,为什么我们不能简单地说 Execute Aroud 成语与 Strategy design pattern 相同?
当我阅读Jon Skeet’s answer 的问题时:“什么是“执行周围”成语?”,他说:
这是您编写方法来做总是需要的事情的模式,例如资源分配和清理,并让调用者传入“我们想对资源做什么”。
在这种情况下,@jon-skeet 使用 executeWithFile(String filename, InputStreamAction action) 方法作为 执行始终需要的事情的方法示例,并使用接口 InputStreamAction 作为对 what 的抽象我们想要处理资源。
public interface InputStreamAction
{
void useStream(InputStream stream) throws IOException;
}
将此与Stratey design pattern 进行比较,为什么我们不能只说接口InputStreamAction 定义了一系列算法?并且,接口InputStreamAction 的每个实现都对应一个封装算法的具体策略。最后,这些算法是可以互换的,我们可以将executeWithFile 与任何这些策略一起使用。
那么,我为什么不能把Jon Skeet’s answer解释为Stratey design pattern的应用例子呢?
顺便问一下,哪个成语最先出现? Execute Around 还是 Strategy 设计模式?
虽然 Execute Around 习语通常与函数式编程有关,但我发现的唯一文档是在 1997 年的 Smalltalk Best Practice Patterns 书中,属于 Smalltalk 编程语言的范围,它遵循 OO 方法。
因为设计模式描述了一般解决方案来解决经常出现的问题,那么我们可以说执行周围和策略都是相同的解决方案解决不同的问题。所以,我问:我们真的需要不同的名称来识别相同的解决方案,当它应用于不同的问题时?
虽然我同意@iluwatar 的answer 这是传达不同想法的方式,但我仍然认为我可以传达 Execute Around 的想法,只是告诉它:“我使用了一个指定我想对资源做什么的策略,始终以相同的方式设置和清理。”
所以 Execute Around 成语减少了歧义(这很好),但同时也增加了设计模式的名称?而且,这是一个好习惯吗?
【问题讨论】:
标签: java oop design-patterns language-agnostic idioms