编程语言和设计模式

3
不同的编程语言有不同的特点或缺乏某些特点。设计模式是一种解决这些缺点的方法。我看过有关静态、面向对象语言(Java、C++)中设计模式的书籍和列表,还看过Python中设计模式的视频。
我对了解其他语言(如Forth、Icon、Lisp等)中常见的设计模式很感兴趣。一个简短的描述它们的外观和为什么需要在该语言中使用它们会很好。也许与另一种解决此问题的语言进行简短比较会更好。

并不是说设计模式不能用于解决语言上的不足,而它们真正的目的是以可重用的方式定义解决常见问题的方法,与其他设计决策(如适当的抽象或性能,比如使用CRTP来避免虚方法)相一致。 - TheXenocide
5个回答

9

设计模式有时被称为“惯用语”。在非面向对象的语言(C、Forth、COBOL等)中,它们只是“通常做事情的方式”。有时,它们被称为“算法”。每种语言(确实,每个领域)都有设计解决方案的模式。

如果您看到某些东西两三次,您就会看到一种模式。如果您能描述上下文、问题、解决方案和后果,您已经将该模式从模糊的概念提升为具体而明确的内容。

在非面向对象的语言中,这些模式通常没有名称和目录。不知道为什么会这样,但确实如此。


3

关于LISP中的设计模式,你可以阅读Peter Norvig的这篇文章

引用这张幻灯片

23个设计模式中有16个是隐形的或更简单的


2
在Lisp中,你使用以下内容而不是设计模式:
  • lambda和closure(匿名函数和捕获环境)
  • 高阶函数(处理函数的函数)
  • 宏(语法扩展)
  • 不同的评估策略(惰性评估,回溯)
  • 一级函数,类,命名空间,模块等
  • 动态环境(例如随时替换函数)
  • 等等。
我不太清楚在这个上下文中什么是设计模式。如果设计模式是一种应该遵循以解决某些问题的配方,那么这就是编程语言或环境中缺少的功能。计算机可以很好地处理重复的任务,因此必须实现设计模式并使用实际参数调用。

2

设计模式并不是特定于某种编程语言的。它们是针对常见问题的通用解决方案。


2
如果我们所说的设计模式是指应该遵循的解决常见问题的配方,那么设计模式就是你的编程语言和环境中缺少功能。重复性工作最适合由计算机完成,为什么不编写该设计模式并在需要时调用它呢? - Levente Mészáros
重复性工作最适合由计算机完成,为什么不编写该设计模式并在需要时调用它呢?将模式与算法区分开来的核心思想是,每次实现模式时,模式往往会略有不同。底层模式相同,但实现方式因各种原因而有所不同,这使得简单地实现一次并重复使用变得困难。 - munificent

0

C#和.Net中的委托和事件使得实现观察者模式变得非常简单,因为它是如此常用,例如用于处理GUI事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接