是否有关于设计模式的经典书籍?[关闭]


49

我对学习设计模式感兴趣,并且想知道学习该主题的顶级书籍。

是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及有关设计模式的其他有用信息?那本书使它与众不同吗?


我不确定这是否是您要考虑的内容,但是我在Forrst上发现了很多聪明的开发资料。
Trey Piepmeier

2
将“设计模式参考源”或“设计模式资源”的标题怎么样(因为我不是指“参考”,而是“按需查找”),然后将所有列表内容移入正文(或将其删除) )?


对于一些不错的实现,我过去常常看一下工厂化方面的内容(尽管没有买书)。
史蒂文·埃弗斯

4
鉴于此问题得到了完整而全面的解答,我已经关闭了其他设计模式问题,作为该问题的重复部分,将其指定为该主题的规范问答。

Answers:


58

设计模式:可重用的面向对象软件的元素非常接近我对设计模式的经典著作的定义。根据其维基百科文章(重点是我的):

该书的原始出版日期是1994年10月21日,拥有1995年的版权,而到2010年7月,该书已印刷第38册。该书于1994年10月在俄勒冈州波特兰举行的OOPSLA会议上首次向公众公开。它对软件工程领域具有很大的影响力,被视为面向对象设计理论和实践的重要资料。已用英语和其他13种语言售出了500,000册

设计模式的先驱Ward CunninghamWikiWikiWeb上维护该书的模式在线目录。根据维基百科有关设计模式的文章(再次强调我的观点):

设计模式的书设计模式后,获得了计算机科学普及:可复用面向对象软件的元素被刊登在1994年通过所谓的“四人帮”(Gamma等)。

同一篇文章中还引用了很多其他类型的书籍 :

在我读过福勒的书中,这本书很有影响力,而且读得很好。在某些时候,这对我的品味有点模糊,但总体而言,这是一本令人愉快的书。本书中包含模式的在线目录,并带有最少的描述。

我也浏览了Head First设计模式,如果您读过Head First系列的其他书籍,则与该系列中的大多数书籍一样,它的质量和趣味性都很高:

Head First是由O'Reilly Media发行的一系列有关许多主题的入门书籍。它强调了非正统的,视觉密集的,涉及读者的难题,笑话,非标准的设计和布局以及引人入胜的对话风格的组合,以使读者沉浸在给定的主题中。

术语“设计模式”有些模糊,因为每个通用的可重用解决方案都可以视为一种设计模式。我一直注意到有一种倾向将标签应用到上面列出的其中一本值得注意的书中,尤其是《四人帮》和《福勒》书中描述的解决方案上。设计模式并没有遵循独特的开发过程,它们是正常的软件解决方案,恰好可以重用,并且很难识别

但是,如果将这两本书的在线目录与特定语言的书的内容进行比较,您会发现它们通常用作模板。因此,我要说的是,尽管从历史角度来看,这两本书都非常接近规范参考,但GoF本书是更重要的一本,尽管这两本书都限于面向对象的编程


2
+1。实际上,我想给您+5,但是a,这是不允许的。
Dipan Mehta

整个面向模式的软件体系结构系列涉及不同类型系统中的模式-第1卷涉及跨领域的架构模式和模式,第2卷涉及并发系统,第3卷涉及网络/分布式系统中的资源管理,第4卷涉及分布式系统,第5卷涉及模式语言以及其他4卷的参考。考虑到这个问题,我认为第5卷可能也适用,但是我并没有花太多时间...。
Thomas Owens

@Yannis首先要基于静态类型语言。有没有关于python之类的动态语言的好书。
ravi404 2013年



23

头先设计模式

在任何给定的时刻,在世界上某个地方,人们都在为您遇到同样的软件设计问题而苦苦挣扎。您知道您不想重新发明轮子(或更糟糕的是,轮胎漏气),因此您可以参考设计模式-那些面临相同问题的人所汲取的教训。使用设计模式,您可以利用其他人的最佳实践和经验,从而可以将时间花在……其他方面。更具挑战性的东西。更复杂的东西。更有趣。

您想了解重要的模式-为什么使用它们,何时使用它们,如何使用它们(以及何时不使用它们)。但是,您不仅要看书中的图案,还想知道它们在野外的外观。在他们的本机环境中。换句话说,在现实世界中的应用。您还想了解Java API中如何使用模式,以及如何在自己的代码中利用Java的内置模式支持。

您想学习真正的OO设计原则,以及为什么老板告诉您的关于继承的所有内容都是错误的(以及替代方法)。您想了解这些原理在下一次没有设计模式的小溪时将如何帮助您。

最重要的是,您想学习“设计模式”的“秘密语言”,以便当同事随意提及他对Command,Facade,Proxy和马提尼酒之间的工厂。您将轻松地对Singleton为什么不像听起来那么简单,Factory如何经常被误解,或者Decorator,Facade和Adapter之间的真实关系有深刻的理解。

有了Head First Design Patterns,您就可以避免尴尬地认为Decorator是“ Trading Spaces”展览中的东西。


这个。这是一本非常容易阅读的书,它彻底改变了我处理软件工程的方式。
GSto

2
整个首发系列很棒,特别是对于初学者来说。
Thomas Stock 2010年

2
我喜欢这本书,但绝对讨厌封面!我的一个非程序员同事前几天走到我的办公室,看了这本书,说:“ Head First Designer Patterns?您正在从事时装业务吗?”
皮特

1
@Pete为什么封面会给您带来更多麻烦。她显然过着双重生活。fishbowl.pastiche.org/2005/08/12/...
戈登

10

是的,有一本关于设计模式的著名书籍:设计模式:可重用的面向对象软件的元素,其作者通常被称为“四人帮”(GoF),几乎所有有关设计模式的文章都对此进行了引用。



不是关于设计模式的书。这模式的目录。一开始对设计模式进行了简短的介绍,但我认为介绍不够。
约尔格W¯¯米塔格

@JörgWMittag创建设计模式不是一个独特的过程,设计模式是相对较小的可重用解决方案。设计模式是通过软件开发的正常过程创建的,与众不同的是它们的巨大可重用性。唯一相关的唯一过程是将解决方案识别为设计模式,而目录可以很好地做到这一点。
yannis 2011年

9

设计模式:可重用的面向对象软件的元素

替代文字

来自维基百科

设计模式:可重用的面向对象软件的要素是一本软件工程书,描述了针对软件设计中常见问题的重复解决方案。该书的作者是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides,前言是Grady Booch。这些作者通常被称为“四人帮”,GoF或Go4。本书分为两个部分,前两章探讨了面向对象编程的功能和陷阱,其余各章介绍了23种经典的软件设计模式。本书包括C ++和Smalltalk中的示例。


3

最好的设计模式网站之一是Ward's Wiki,这是第一个Wiki。请参阅http://c2.com/cgi/wiki?HistoryOfPatterns以获取良好的起始页面。

1987年,沃德(Ward)和肯特(Kent)向泰克公司的半导体测试系统小组(该公司在完成设计方面遇到麻烦)提供咨询。他们决定尝试他们一直在研究的模式知识。就像亚历山大(Alexander)所说,建筑物的占用者应该设计建筑物一样,沃德(Ward)和肯特(Kent)让用户的代表(培训师和现场工程师)完成设计。

Ward提出了五种模式的“语言”,可帮助新手设计师充分利用Smalltalk的优势并避免其弱点...

Ward和Kent对用户设计的界面(公认的斯巴达式)优雅感到惊讶。他们在奥兰多的OOPSLA 87报告了该实验的结果。他们写下了一个小组的立场,并在Norm Kerth的研讨会上作了介绍,该研讨会讲的是物体来自何处?他们讨论了模式,直到脸色发青,并达成了很多协议,但是如果没有更具体的模式,没人会签署。

同时,Erich Gamma忙于撰写和反思ET ++中的面向对象设计,这是他的博士学位论文的一部分。Erich已经意识到重复的设计结构或模式很重要。问题实际上是您如何捕获和交流它们。

布鲁斯·安德森(Bruce Anderson)在TOOLS 90上发表了演讲,ErichGamma出席了演讲。埃里希喜欢这次演讲。布鲁斯在渥太华的EcoopOopsla90上发表了一篇论文,并经营了一个名为《走向建筑手册》的 BOF ,他,Erich Gamma,Richard Helm等人开始讨论模式。这是Richard和Erich第一次见面,他们意识到他们在编写可重用的OO软件背后的关键思想上有着共同的想法。

就在ECOOP'91炎热的夏天,坐在苏黎世屋顶上的Erich Gamma和Richard Helm在一起之前,他们将非常缓慢的模式目录汇总在一起,最终成为了DesignPatterns。

在1991年布鲁斯(Bruce)举办的OOPSLA研讨会上,事情真的发生了变化。巧合的是,埃里希·伽玛(Erich Gamma),理查德·赫尔姆(Richard Helm),拉尔夫·约翰逊(Ralph Johnson)和约翰·弗利斯赛德(John Vlissides)都在那里。他们后来成为《设计模式》一书的四人帮 ...


2

我认为将模式重构很有用,因为它描述了如何在GoF书中将某些设计/代码重构为模式。这可能有助于克服初始学习曲线。哦,它也在考虑“模式幸福” :)

您可能还会发现面向模式的软件体系结构的前三卷很不错。


1

设计模式

本教程站点包含以下小节

  • 每种设计模式的意图
  • 设计模式的真实世界结构
  • 问题陈述
  • 关于这个问题的详细讨论
  • 有关如何得出模式的清单
  • 达成规则的经验法则。
  • 设计模式的代码段,包括C#,C ++,Delphi,Java和PHP

该站点还包含有关反模式,UML和重构的指南。


乍看之下,SourceMaking网站看起来很简单,但这确实是一个很好的参考。除了设计模式外,一些开发,体系结构和项目管理反模式也很有趣。重构后的解决方案实际上可以帮助您节省即将召开的会议。(对于设计模式参考来说还不错)
无论

1

原始书籍“设计模式:可重用的面向对象软件的元素”是面向对象设计模式的良好资源。

那里还有许多其他书籍。当我需要快速参考并且我的GoF书籍无法访问时,Wikipedia通常会提供有关这些设计模式和其他设计模式的足够信息。

这些是我主要使用的。还应注意,人们已经开始将模式格式应用于其他事物,例如项目管理。

如果您想了解反模式,您应该知道,有两本书,《反模式:危机中的重构软件,体系结构和项目》,以及《重构:改进现有代码的设计》,其中有代码气味,反模式的另一个名称。


1

Robert C. Martin撰写的“ C#中的敏捷原理,模式和实践”。我认为他也有这本书的Java版本。

而且,即使您不采用完整的DDD方法,但不是模式本身,但域驱动设计具有一些很棒的概念。

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

1

如果您对C ++中的设计模式特别感兴趣,请尝试Andrei Alexandrescu撰写的Modern C ++ Design

本书讨论了如何在C ++中实现诸如Factory,Singleton和Visitor等常用模式。它还讨论了非常C ++特定的主题,例如智能指针,模板元编程和基于策略的类设计。

本书作者是一位权威专家,以

通过模板元编程实现基于策略的设计的开拓性工作。这些想法在他的《现代C ++设计》一书中进行了阐述,并首先在他的编程库Loki中实现。他还在他的MOJO库中实现了“移动构造函数”的概念。他以“ Generic <Programming>”下划线为《C / C ++用户杂志》撰稿。


1
您介意进一步解释它的功能和优点吗?在Stack Exchange上不太欢迎“仅链接的答案”
gnat 2013年

@gnat:怎么样?
Dima

好吧,您最近的编辑对我来说肯定是一种进步。虽然答案的读者可能会从更详细的解释受益Aleksandresku
蚊蚋

@gnat:由于您显然知道他是谁,请随时编辑我的答案。
Dima
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.