繁体   English   中英

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

[英]Do we have design patterns in C++ as we have in java?

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

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

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

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

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

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

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

对于C ++,有很好的书籍,如Effective C ++ ,它向您介绍基本的。 wikibook 更多C ++习语也值得一看。

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

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

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

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

然后在什么是设计模式

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM