这里的问题是特定于编程语言或技术的设计模式,
就像你只能在C#,Java而不是在VB6.0中做复合模式一样。这是真的,如果是,那么什么是用面向对象编程语言无法实现的模式。
答案 0 :(得分:6)
在经典的“四人帮”模式中,有不少是特定于语言的模式。像Visitor这样的其他人只在面向对象的环境中才有用。功能语言有fold
(catamorphisms)而不是Visitor,任何试图在功能语言中使用Visitor的人都会被视为危险的疯子。最后,有些模式可以应用于任何语言,例如Factory。
我不是Gamma等人所采用的模式运动的忠实粉丝的原因之一是模式的观点缺乏智力连贯性。 “任何有用的东西”都是一个很好的主张,但是,正如你所观察到的那样,当语言或范例发生变化时,它并没有提供关于哪些模式仍然有用的指导。
为了说明分类模式中固有的风险,请查看我最喜欢的一个系列:Kent Beck的Smalltalk Best Practice Patterns。尽管标题中有“Smalltalk”,但许多程序员发现这些模式也适用于Java和Python等语言。
答案 1 :(得分:4)
模式依赖于编程语言,尽管不像你的问题所暗示的那么强烈。例如,Iterator是一种设计模式,但是在许多语言(C ++,Java,C#)中它都是语言的一部分(OK,类库)。
有几种模式可以称为面向对象,即如果没有适当的类,继承和多态,很难实现它们。示例:抽象工厂,策略,模板方法。然而,即使这些也可以在例如C,如果有人真的想要的话。这是可能的,因为C有函数指针。我会非常难以想象在没有指针(或等效)支持的非OO语言中实现上述模式。再说一遍,我想这些模式在这种语言中无论如何都不会有意义......
答案 2 :(得分:3)
我认为这更多地取决于您可以使用的语言功能,但不,我不会说设计模式仅限于特定语言。
答案 3 :(得分:3)
设计模式本身并不是特定于语言的,但是某些模式可能是范例特定的,例如在C中实现单例模式没有任何意义,因为您可能只编写一个普通的旧模块。
然而,设计模式不是语言特定的,但在不同的范例中更有用或更有意义(OO与结构化与功能性)
答案 4 :(得分:0)
不,他们不是。它们是一种抽象,可以应用于面向对象的语言。
答案 5 :(得分:0)
大多数模式与语言无关。对于某些模式和语言,需要主要的hackery。例如,Windows COM是C(非C ++)语言中复合模式的奇怪实现。
像VB 6.0这样的一些语言提出了需要跳过来实现某些模式的主要障碍,因此不值得努力。
答案 6 :(得分:0)
是和否。某些设计模式并非特定于特定语言,但可能存在特定于语言类的设计模式。
例如,可能存在特定于功能语言的功能设计模式或特定于面向对象语言的面向对象设计模式。可能存在一些重叠,但不是100%。
答案 7 :(得分:0)
这是一个直截了当的答案。
一方面,一些模式依赖于语言,像Factory,Strategy和Template这样的模式依赖于多态和继承等语言机制。
另一方面,存在一些模式,因为我们使用的语言没有正确的功能(例如:访客模式用于弥补Java和C ++等语言中缺少双重调度)。
答案 8 :(得分:0)
设计模式本质上不是语言特定的,尽管某些模式在某些语言中比其他模式更有用。
答案 9 :(得分:0)
设计模式往往特定于特定的编程范例。在许多(大多数?)语言支持多种范例的情况下,给定的设计模式可以应用于完全不同的语言。
那么什么是特定于语言的模式呢?实现模式通常称为成语 请参阅:https://softwareengineering.stackexchange.com/questions/106815/difference-between-idiom-and-design-pattern。