【问题标题】:Which GoF Design pattern will be changed or influenced by the introduction of lambdas in Java8?Java8 中引入 lambda 会改变或影响哪种 GoF 设计模式?
【发布时间】:2013-06-05 10:00:19
【问题描述】:

许多人声称 GoF 设计模式的最大部分只是针对缺少一流功能的解决方法。现在 Java 即将获得 lambda 表达式,其中哪些模式会受到它们的影响?哪些可以显着简化或概括?哪些将基本保持不变?欢迎任何实际示例。

【问题讨论】:

  • 根据维基百科,“语法糖”一词是在 1964 年创造的。en.wikipedia.org/wiki/Syntactic_sugar
  • “GoF 设计模式的最大部分只是缺少一流功能的解决方法”虽然我认为这是真的,但我想知道这种想法有多流行,java 8/9 有多大帮助消除那种叙述

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


【解决方案1】:

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

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

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

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

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

你做你想做的事,但我认为“JavaScript 的优秀部分”很好地介绍了如何利用语言中的函数。你可以拿起它来阅读它!

【讨论】:

【解决方案2】:

我尝试自己写了一系列文章来回答这个问题,其中我分析了一些 GoF 模式及其功能对应物,并带有实际的代码示例。我特别回顾了:Command and StrategyTemplate and ObserverDecorator and Chain of ResponsibilityInterpreter and Visitor

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多