在 Java8 中引入 lambdas 时,哪种 GoF 设计模式会改变或影响?

许多人声称,GoF 设计模式的最大部分只是缺少一等函数的解决方法。现在Java即将获得lambda表达式,这些模式中的哪些会受到它们的影响?哪些可以大大简化或推广?哪些将基本保持不变?欢迎任何实际例子。


答案 1

我认为你会看到行为模式的最大变化。

模板方法 - 模板方法将越来越少地使用,相反,我们将看到对象将函数传递给抽象模板,而不是子类化抽象模板。我很久以前在这里写了一篇关于这个的博客:http://hamletdarcy.blogspot.ch/2007/11/groovy-closures-end-of-template-method.html

观察者模式 - 观察者变得简化,因为您不再需要保留在新事件上更新的观察者列表,而是保留需要在新事件上调用的函数列表。因此,不再有观察者界面,只有函数对象。

状态/策略模式 - 我将它们组合在一起,因为它们在结构上是等价的,只是意图不同。策略的使用变得更加普遍,因为它更容易实现。您不需要父策略和策略子类,只需要函数。因此,只需将函数作为参数传递就很简单,这实际上是使用策略模式。

总的来说,我认为任何需要单方法接口的模式都更容易实现。这将产生两种效果。1)我们将更多地使用这些函数模式,2)我们将停止将它们称为模式,而只是“传递函数”。

你做你想做的事,但我认为“JavaScript the Good Parts”很好地介绍了在一种语言中利用函数。你可以拿起它并阅读它!


答案 2

我试图自己写一系列文章来回答这个问题,其中我用实际的代码示例分析了一些GoF模式及其函数对应物。我特别重温了:命令和战略模板和观察者装饰者和责任链解释者和访客