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

时间:2013-06-09 17:18:21

标签: java design-patterns lambda functional-programming java-8

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

2 个答案:

答案 0 :(得分:24)

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

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

观察者模式 - 观察者变得简化了,因为你不再需要保留一个观察者列表来更新新事件,而是保留一个需要在新事件上回调的函数列表。所以没有更多的Observer接口和函数对象。

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

总的来说,我认为任何需要单方法界面的模式都变得更容易实现。这将产生两种效果。 1)我们将更多地使用这些功能模式,2)我们将停止将它们称为模式,但就像“传递函数”一样。

你做你想做的事,但我认为“JavaScript the Good Parts”给出了一个很好的介绍来利用语言中的函数。你可以拿起来看看吧!

答案 1 :(得分:4)

我试着回答这个问题,自己编写了一系列文章,分析了一些GoF模式以及它们与实际代码示例的功能对应。我特别重访了:Command and StrategyTemplate and ObserverDecorator and Chain of ResponsibilityInterpreter and Visitor