Design patterns 编程语言和设计模式

Design patterns 编程语言和设计模式,design-patterns,programming-languages,Design Patterns,Programming Languages,不同的编程语言具有不同的特性或缺少某些特性。设计模式是解决这些缺点的一种方法。我看过关于静态面向对象语言(Java、C++)中设计模式的书籍和列表,也看过关于Python中设计模式的视频 我很想看看其他语言中的一些常见设计模式,如Forth、Icon、Lisp等。简短描述一下它们的外观以及在一种语言中为什么需要它们就好了。也许可以与另一种不使用设计模式解决此问题的语言进行简短比较。在Lisp中,您使用的不是设计模式,而是: lambda和closure(匿名函数和捕获环境) 高阶函数(处理函数

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


我很想看看其他语言中的一些常见设计模式,如Forth、Icon、Lisp等。简短描述一下它们的外观以及在一种语言中为什么需要它们就好了。也许可以与另一种不使用设计模式解决此问题的语言进行简短比较。

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

  • lambda和closure(匿名函数和捕获环境)
  • 高阶函数(处理函数的函数)
  • 宏(语法extesnions)
  • 不同的评估策略(惰性评估、回溯)
  • 一流的函数、类、名称空间、模块等
  • 动态环境(如随时更换功能)
  • 等等

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

对于LISP中的设计模式,您可以阅读Peter Norvig的文章

引述:

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


设计模式实际上并不意味着要与任何语言绑定。它们是解决常见问题的更普遍的方法

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

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

如果你看过两三次某件事,你就看到了一种模式。如果你能描述上下文、问题、解决方案和结果,你就把模式从模糊提升到了具体和具体


在非OO语言中,模式通常不被命名和编目。不知道为什么会出现这种情况,似乎是这样。

并不是说设计模式不能用来克服语言的缺陷,但它们的真正目的是定义一种方法,以可重用的方式解决常见问题,并遵循其他设计决策,如适当的抽象或性能(如使用CRTP避免虚拟方法)。如果我们所说的设计模式是指解决常见问题的方法,那么设计模式在您的编程语言和环境中缺乏功能。重复性工作最好由计算机完成,为什么不编写该设计模式并在需要时调用它?>重复性工作最好由计算机完成,为什么不你不能编写设计模式并在需要时调用它吗?将模式从算法中分离出来的核心思想是,每次实现模式时,模式往往略有不同。基础模式是相同的,但实现方式不同,因此很难简单地实现一次并重用它。