设计模式是否特定于语言或技术?

Moh*_*hit 9 design-patterns programming-languages

这里的问题是特定于编程语言或技术的设计模式,

就像你只能用C#,Java而不是VB6.0那样做复合模式.这是真的,如果是的那么什么是用面向对象编程语言无法实现的模式.

Pét*_*rök 6

模式取决于编程语言,尽管不像您的问题所暗示的那么强烈。例如,迭代器是一种设计模式,但在许多语言(C++、Java、C#)中,它是语言的一部分(好吧,类库)。

有几种模式可以称为面向对象,即如果没有适当的类、继承和多态,就很难实现它们。示例:抽象工厂、策略、模板方法。然而,如果有人真的想要,即使这些也可以在例如 C 中完成。这是可能的,因为 C 有函数指针。尽管我很难想象在没有指针(或等效)支持的非 OO 语言中实现上述模式。再说一次,我想这些模式无论如何在这种语言中都没有意义......

  • 作为推论,大多数设计模式都有效地替代了语言中不存在的功能。例如,策略和命令是缺乏一流功能的解决方法。维基百科带有块的 Ruby 策略示例完美地说明了这一点(请记住,块只是匿名函数的特殊语法)。如 Wikipedia 在 Common Lisp 中的示例所示,Composite 是缺少通用函数的一种解决方法。我怀疑可以通过这种方式将大多数设计模式与语言功能相匹配。 (2认同)
  • Mark Dominus 的一篇颠覆性文章说明了 @Zak 的观点 - http://blog.plover.com/prog/design-patterns.html (2认同)

Nor*_*sey 6

在经典的"四人帮"模式中,有不少是特定于语言的模式.像Visitor这样的其他人只在面向对象的环境中才有用.功能语言有fold(catamorphisms)而不是Visitor,任何试图在功能语言中使用Visitor的人都会被视为危险的疯子.最后,有些模式可以应用于任何语言,如Factory.

我不是Gamma等人所采用的模式运动的忠实粉丝的原因之一是模式的观点缺乏智力连贯性."任何有用的东西"都是一个很好的主张,但是,正如你所观察到的那样,当语言或范式发生变化时,它们对于哪些模式可能仍然有用提供了很多指导.

为了说明分类模式中固有的风险,请查看我最喜欢的一个集合:Kent Beck的Smalltalk最佳实践模式.尽管标题中有"Smalltalk"作品,但许多程序员发现这些模式也适用于Java和Python等语言.


hha*_*fez 5

设计模式本身并不是特定于语言的,但是有些模式可能是特定于范式的,例如,在 C 中实现单例模式是没有意义的,因为您可能只编写一个普通的旧模块。

然而,设计模式不是特定于语言的,但在不同的范例中可能更有用或更有意义(面向对象、结构化、函数式)