许多人声称 GoF 设计模式的最大部分只是缺少一流功能的解决方法。现在 Java 即将获得 lambda 表达式,其中哪些模式会受到它们的影响?哪些可以显着简化或概括?哪些将基本保持不变?欢迎任何实际的例子。
2 回答
我认为你会看到行为模式的最大变化。
模板方法- 模板方法将越来越少使用,相反我们将看到对象将函数传递给 AbstractTemplate,而不是继承 AbstractTemplate。我很久以前在这里写过这个博客: http ://hamletdarcy.blogspot.ch/2007/11/groovy-closures-end-of-template-method.html
观察者模式- 观察者变得简化,因为您不再需要保留一个在新事件上更新的观察者列表,而是保留一个需要在新事件上回调的函数列表。所以不再有 Observer 接口,只有函数对象。
状态/策略模式- 我将它们组合在一起,因为它们在结构上是等效的,只是意图不同。策略的使用变得更加普遍,因为它更易于实施。您不需要父策略和策略子类,只需要函数。因此,只需将函数作为参数传递很简单,这实际上是使用策略模式。
总的来说,我认为任何需要单一方法接口的模式都变得更容易实现。这将产生两种效果。1)我们将更多地使用这些功能模式,并且 2)我们将不再将它们称为模式,而只是将它们称为“传递函数”。
你做你想做的事,但我认为“JavaScript the Good Parts”很好地介绍了利用语言中的函数。你可以拿起它来阅读它!
我尝试自己写了一系列文章来回答这个问题,其中我分析了一些 GoF 模式及其与实际代码示例的功能对应物。我特别重温了:Command and Strategy、Template and Observer、Decorator and Chain of Responsibility、Interpreter and Visitor。