我们在Java中是否有像C ++那样的设计模式?

时间:2010-01-31 12:55:37

标签: java c++ design-patterns

因为我们在java中有这么多设计模式,所以我们在c ++中有任何设计模式。或者我们可以在c ++中使用相同类型的模式。

11 个答案:

答案 0 :(得分:28)

关于设计模式的原始书(设计模式:四人帮的可重复使用的面向对象软件的元素)早于Java。其中的例子有C ++和Smalltalk。

设计模式适用于许多面向对象的编程语言;也许只是在Java中,它们通常是无处不在的,你需要它们来解决任何非平凡的事情。

但是,一些设计模式是通过语言功能解决的(例如,您不需要在C#中显式实现Observer模式)。其他甚至不适用于Java,因为它们需要多个类继承。

答案 1 :(得分:16)

设计模式是概念性的,这意味着它不受语言的束缚。

您可以在C ++上使用相同的想法。

答案 2 :(得分:7)

设计模式与语言无关。语言特定模式称为idioms - 这些是以某种语言反复出现问题的解决方案。

对于C ++,有一些好书如Effective C++,它们向您介绍基本的书。 wikibook More C++ idioms也值得一看。

答案 3 :(得分:3)

设计模式几乎与语言无关,尽管它们适合某些编程范例,而不适用于其他编程范例。在这方面,Java中的许多模式在C ++中都能很好地工作。

与此同时,C ++的丰富(并且有些人可以说是!)模板系统允许非常有趣地实现标准模式,例如参见Alexandrescu的Modern C ++ Design及其非常有趣的基于策略的设计。

答案 4 :(得分:3)

这个问题非常有趣,因为Design Patterns 在C ++中起源简介中的GoF书(Gamma,Johnson,Helm,Vlissides):

  

本书的目的是记录将面向对象软件设计为设计模式的经验。每种设计模式都系统地命名,解释和评估面向对象系统中重要且反复出现的设计。我们的目标是以人们可以有效使用的形式捕捉设计体验。为此,我们记录了一些最重要的设计模式,并将它们作为目录提供。

然后在什么是设计模式

  

虽然设计模式描述了面向对象的设计,但它们基于实用的解决方案,这些解决方案已经在主流的面向对象编程语言(如Smalltalk和C ++)中实现,而不是过程语言(Pascal,C,Ada)或更加动态的面向对象语言(CLOS,Dylan,Self)。我们选择Smalltalk和C ++是出于实际的原因:我们的日常体验一直是这些语言,它们越来越受欢迎。

此外,设计模式受到批评的理由是它们仅仅是成语,因为隐瞒事实而得到了美化。批评者(抱歉,没有消息来源)说,DP只是弥补了缺乏直接语言支持。这至少在一定程度上是正确的:看看Scala对 Singleton 的内置支持如何避免public static getInstance(),或者回想起Visitor只是模拟双重调度。

我认为DP作为实现习语的概念与通常的解释(资本 D esign)一样有用。首先,我们需要认识到不同的语言需要不同的方法,而DP的高位一定无济于事。其次,特定于每种语言的实现技术的常用词汇与设计方法的可能跨语言词汇一样重要。

答案 5 :(得分:2)

设计模式涵盖所有语言。我试图找到一些,但现在似乎无法找到它们。我相信其中一个特别是来自“Head Start”系列。采用复杂的学习问题,使其易于阅读,从而更好地保留。除此之外,那里有很多书,但正如上面的例子所示,有些书比其他书更好。设计模式可能很复杂!

答案 6 :(得分:2)

如前所述,有关设计模式的原书使用C ++和一些SmallTalk代码示例。话虽如此,那本书中使用的代码今天并不算是优秀的C ++,所以我会小心在C ++中应用“经典”设计模式。

答案 7 :(得分:1)

设计模式是常见软件问题的常用解决方案。虽然某些语言或框架确实比其他语言或框架更容易适应不同的模式,但模式本身对于语言选择是合理的不可知的,因此您可能会发现C ++的模式实现。

答案 8 :(得分:1)

我想说一个模式通常适合一个或几个编程范例,因此它不受限于单一语言。有人说模式是范式/语言中缺少特征的标志,或者是规避语言/范式问题的一种方式。

答案 9 :(得分:0)

许多Java模式直接适用于C ++和几乎所有语言。 当然,有些模式在一种语言中写得很优雅,但在另一种语言中并不存在。

答案 10 :(得分:0)

参考boost库文档,他们已经实现了许多设计模式,如Java。

相关问题