【问题标题】:Programming Languages and Design Patterns编程语言和设计模式
【发布时间】:2010-09-12 17:53:51
【问题描述】:

不同的编程语言具有不同的特性或缺少某些特性。设计模式是解决这些缺点的一种方法。我看过关于静态、面向对象语言(Java、C++)的设计模式的书籍和列表,还有关于 Python 设计模式的视频。

我有兴趣查看其他语言(如 Forth、Icon、Lisp 等)中的一些常见设计模式。简短描述它们的外观以及为什么需要它们在一种语言中会很好。也许与另一种无需设计模式即可解决此问题的语言进行简短比较。

【问题讨论】:

  • 并不是说设计模式不能用来克服语言缺陷,而是它们的真正目的是定义一种以可重用的方式解决常见问题的方法,该方法遵循其他设计决策,例如适当的抽象或性能(例如使用 CRTP 来避免虚拟方法)。

标签: design-patterns programming-languages


【解决方案1】:

设计模式有时被称为“惯用语”。在非 OO 语言(C、Forth、COBOL 等)中,它们只是“通常的做事方式”。有时,它们被称为“算法”。每种语言(实际上,每种学科)都有设计解决方案的模式。

如果您已经看到某件事两到三遍,那么您就已经看到了一种模式。如果你能描述上下文、问题、解决方案和后果,你就将模式从模糊提升到了具体和具体的东西。

在非 OO 语言中,模式通常不会被命名和分类。不知道为什么会这样,好像是这样。

【讨论】:

    【解决方案2】:

    关于 LISP 中的设计模式,您可以阅读 Peter Norvig 的 this

    引用this slide:

    23 种设计模式中有 16 种是不可见的或更简单的

    【讨论】:

      【解决方案3】:

      设计模式并不是真的要与任何语言联系在一起。它们是针对常见问题的更通用的解决方案。

      【讨论】:

      • 如果我们所说的设计模式是指您应该遵循的解决常见问题的方法,那么设计模式在您的编程语言和环境中缺乏功能。重复性工作最好由计算机完成,您为什么不编写该设计模式并在需要时调用它?
      • > 重复性工作最好由计算机完成,为什么不编写该设计模式并在需要时调用它呢?将模式与算法区分开来的核心思想是,模式在每次实现时都会略有不同。底层模式是相同的,但实现方式各不相同,因此很难简单地实现一次并重用它。
      【解决方案4】:

      在 Lisp 中,您使用的不是设计模式:

      • lambda 和闭包(匿名函数和捕获环境)
      • 高阶函数(处理函数的函数)
      • 宏(语法扩展)
      • 不同的评估策略(惰性评估、回溯)
      • 一流的函数、类、命名空间、模块等
      • 动态环境(例如随时替换函数)

      我真的不知道设计模式在这种情况下意味着什么。如果设计模式是解决某些问题应该遵循的秘诀,那么它就是编程语言或环境中缺乏特性。计算机可以很好地处理重复性任务,因此必须实现设计模式并使用实际参数调用。

      【讨论】:

        【解决方案5】:

        C# 和 .Net 中的委托和事件使得实现 observer pattern 变得微不足道,因为它非常常用,例如处理 GUI 事件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-30
          • 2015-07-04
          • 2011-04-22
          • 2010-11-15
          • 2013-07-23
          相关资源
          最近更新 更多