我对学习设计模式感兴趣,并且想知道学习该主题的顶级书籍。
是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及有关设计模式的其他有用信息?那本书使它与众不同吗?
我对学习设计模式感兴趣,并且想知道学习该主题的顶级书籍。
是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及有关设计模式的其他有用信息?那本书使它与众不同吗?
Answers:
设计模式:可重用的面向对象软件的元素非常接近我对设计模式的经典著作的定义。根据其维基百科文章(重点是我的):
该书的原始出版日期是1994年10月21日,拥有1995年的版权,而到2010年7月,该书已印刷第38册。该书于1994年10月在俄勒冈州波特兰举行的OOPSLA会议上首次向公众公开。它对软件工程领域具有很大的影响力,被视为面向对象设计理论和实践的重要资料。已用英语和其他13种语言售出了500,000册。
设计模式的先驱Ward Cunningham在WikiWikiWeb上维护该书的模式的在线目录。根据维基百科有关设计模式的文章(再次强调我的观点):
设计模式的书设计模式后,获得了计算机科学普及:可复用面向对象软件的元素被刊登在1994年通过所谓的“四人帮”(Gamma等)。
同一篇文章中还引用了很多其他类型的书籍 :
- 面向模式的软件体系结构第1卷:模式系统,作者:Douglas Schmidt,Michael Stal,Hans Rohnert和Frank Buschmann,
- Martin Fowler 的企业应用程序架构模式,
- 企业集成模式:设计,构建和部署消息解决方案。,由Hohpe,Gregor和Bobby Woolf以及
- Eric T. Freeman,Elisabeth Robson,Bert Bates和Kathy Sierra撰写的Head First Design Patterns。
在我读过福勒的书中,这本书很有影响力,而且读得很好。在某些时候,这对我的品味有点模糊,但总体而言,这是一本令人愉快的书。本书中包含模式的在线目录,并带有最少的描述。
我也浏览了Head First设计模式,如果您读过Head First系列的其他书籍,则与该系列中的大多数书籍一样,它的质量和趣味性都很高:
Head First是由O'Reilly Media发行的一系列有关许多主题的入门书籍。它强调了非正统的,视觉密集的,涉及读者的难题,笑话,非标准的设计和布局以及引人入胜的对话风格的组合,以使读者沉浸在给定的主题中。
术语“设计模式”有些模糊,因为每个通用的可重用解决方案都可以视为一种设计模式。我一直注意到有一种倾向将标签应用到上面列出的其中一本值得注意的书中,尤其是《四人帮》和《福勒》书中描述的解决方案上。设计模式并没有遵循独特的开发过程,它们是正常的软件解决方案,恰好可以重用,并且很难识别。
但是,如果将这两本书的在线目录与特定语言的书的内容进行比较,您会发现它们通常用作模板。因此,我要说的是,尽管从历史角度来看,这两本书都非常接近规范参考,但GoF本书是更重要的一本,尽管这两本书都限于面向对象的编程。
“四人帮”一书- 设计模式:可重用的面向对象软件的元素可能是我们对设计模式的行业标准最接近的东西。
对于更易于理解的介绍,“ Head First:设计模式”也不错。不要被“时髦”的封面所拖累,因为它是一本不错的书,而且如果您先阅读它,可能会帮助您更轻松地掌握GoF书中的概念。
在任何给定的时刻,在世界上某个地方,人们都在为您遇到同样的软件设计问题而苦苦挣扎。您知道您不想重新发明轮子(或更糟糕的是,轮胎漏气),因此您可以参考设计模式-那些面临相同问题的人所汲取的教训。使用设计模式,您可以利用其他人的最佳实践和经验,从而可以将时间花在……其他方面。更具挑战性的东西。更复杂的东西。更有趣。
您想了解重要的模式-为什么使用它们,何时使用它们,如何使用它们(以及何时不使用它们)。但是,您不仅要看书中的图案,还想知道它们在野外的外观。在他们的本机环境中。换句话说,在现实世界中的应用。您还想了解Java API中如何使用模式,以及如何在自己的代码中利用Java的内置模式支持。
您想学习真正的OO设计原则,以及为什么老板告诉您的关于继承的所有内容都是错误的(以及替代方法)。您想了解这些原理在下一次没有设计模式的小溪时将如何帮助您。
最重要的是,您想学习“设计模式”的“秘密语言”,以便当同事随意提及他对Command,Facade,Proxy和马提尼酒之间的工厂。您将轻松地对Singleton为什么不像听起来那么简单,Factory如何经常被误解,或者Decorator,Facade和Adapter之间的真实关系有深刻的理解。
有了Head First Design Patterns,您就可以避免尴尬地认为Decorator是“ Trading Spaces”展览中的东西。
是的,有一本关于设计模式的著名书籍:设计模式:可重用的面向对象软件的元素,其作者通常被称为“四人帮”(GoF),几乎所有有关设计模式的文章都对此进行了引用。
最好的设计模式网站之一是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)都在那里。他们后来成为《设计模式》一书的四人帮 ...
Robert C. Martin撰写的“ C#中的敏捷原理,模式和实践”。我认为他也有这本书的Java版本。
而且,即使您不采用完整的DDD方法,但不是模式本身,但域驱动设计具有一些很棒的概念。
* Ubiquitous Language
* Code first approach (vs. DB first)
* etc.
如果您对C ++中的设计模式特别感兴趣,请尝试Andrei Alexandrescu撰写的Modern C ++ Design。
本书讨论了如何在C ++中实现诸如Factory,Singleton和Visitor等常用模式。它还讨论了非常C ++特定的主题,例如智能指针,模板元编程和基于策略的类设计。
本书作者是一位权威专家,以
通过模板元编程实现基于策略的设计的开拓性工作。这些想法在他的《现代C ++设计》一书中进行了阐述,并首先在他的编程库Loki中实现。他还在他的MOJO库中实现了“移动构造函数”的概念。他以“ Generic <Programming>”下划线为《C / C ++用户杂志》撰稿。