【发布时间】:2008-10-28 20:22:36
【问题描述】:
我是一个困惑的新手和业余程序员,试图掌握这一点,如果我的问题有点偏离或没有多大意义,请原谅我。
我看到很多关于 SO 的问题都围绕着设计模式的使用,我想知道是否有人有很好的资源来学习和实施设计模式?我了解总体思路,并且知道如何/何时使用其中的几个(单例、工厂方法),但我知道我错过了。
(以防万一,我的首选语言是 C#,但我可以从其他语言的示例中学习)
【问题讨论】:
标签: oop design-patterns
我是一个困惑的新手和业余程序员,试图掌握这一点,如果我的问题有点偏离或没有多大意义,请原谅我。
我看到很多关于 SO 的问题都围绕着设计模式的使用,我想知道是否有人有很好的资源来学习和实施设计模式?我了解总体思路,并且知道如何/何时使用其中的几个(单例、工厂方法),但我知道我错过了。
(以防万一,我的首选语言是 C#,但我可以从其他语言的示例中学习)
【问题讨论】:
标签: oop design-patterns
和Design Pattern Wikipedia page 是初学者的最佳资源。 FluffyCat 是另一个很好的免费在线资源,用于 Java 和 PHP 中的设计模式。
Gang of Four book 是之后的去向,但它相当先进,所以我会等到你从其他资源中牢牢掌握。
【讨论】:
设计模式之所以很棒有多种原因:
但是当您的目标只是学习设计模式时,我认为您缺少基础知识。所有设计模式都基于更常见的原则。高内聚、低耦合开闭原则、DRY、Liskov 替换原则等。对于这些基本原理,我将按此顺序阅读以下书籍:
之后,您就可以开始学习四种设计模式的基本组合了
下一步:
永远记住:模式不是目标!
【讨论】:
我要补充一点,“四人帮”中的 Design Patterns 书对于任何对设计模式非常感兴趣的人来说都是一本圣经。
【讨论】:
我的建议:
大量阅读来自不同来源的模式。
尝试将尽可能多的模式强制到您正在编写的所有代码中,因为这一点不会产生好的结果。相反,让信息在你的大脑中停留一段时间(阅读:几个月)。
突然间,您会发现自己遇到了一个问题或一段代码,并且您会模糊地记得您已经看到了一些可以解决这个特定问题的方法。现在是时候查看您正在考虑的模式的详细信息并尝试应用它了。
无论如何,这对我有用。
【讨论】:
本教程站点包含以下子部分
本网站还包含关于反模式、UML和重构的指南。
【讨论】:
Bruce Eckel 有一个book on design patterns,虽然它是 Java,但它就像他所有的书一样令人惊叹。最棒的是,它们是免费的!
【讨论】:
C# 3.0 Design Patterns 了解设计模式的 C# 视角。
(来源:oreilly.com)
【讨论】:
我觉得有用且写得很好的入门书是 Design Patterns Explained Alan Shalloway 和 James Trott (Addison Wesley)。
不要从Gang of Four这本书开始,因为它无论如何都不是一本介绍性的书。
【讨论】:
我建议您查看 Jean Paul Boodhoo 的 quintology (?) 关于 DNRtv 上的 Demystifying Design Patterns 的文章,网址如下。视频内容涉及 Singleton、Abstract Factory 等 - 不同之处在于您可以在他讨论理论时观看他的代码。很适合在下雨的工作日观看午餐。
http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum=68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92
【讨论】:
对上述 cmets 的注解。
GOF 模式快速参考
这里是您可以开始的好地方dofactory.com/patterns/patterns.aspx - 您可以找到每个模式的链接以及相应的实现。
但是,请记住,这些是 GOF 模式。一旦您在 OOAD 方面获得了足够的专业知识,您可能还需要阅读和理解高级模式。 Head First Design Patterns 是一个良好的开端,在取得一些进展后,继续学习 Martin Fowler 的企业应用程序架构模式。
应用设计模式 - 思考过程
另一个主要方面 - 应用设计模式与了解它们一样重要。阅读这些文章也可能对您有所帮助。
Applying Design Patterns Part I
Applying Design Patterns Part II
希望对你有帮助
【讨论】:
Head First Design Patterns 是一个很好的设计模式,就像其他已经提到的那样。除此之外,当然还有原著和 C# 设计模式。还有已经提到的好网站。
除了自学之外,我强烈建议您开始或参加您所在地区的模式研究小组。请参阅A Learning Guide To Design Patterns 以获得解释和研究模式的良好顺序。我们这样做了,老实说,我不会像现在这样理解。每周与其他感兴趣的人开会,让您在学习设计模式等抽象知识时,会出奇的自律。
学习愉快!
【讨论】:
在花钱买书之前,我会推荐维基百科优秀的design patterns 页面。也可以通过谷歌搜索“设计模式截屏视频”或在YouTube 上搜索“设计模式”。以不同的方式呈现相同的信息通常有助于降低成本。
Gang of Four 这本书是关于最知名模式的权威文本,但并不那么容易阅读,而且 C++ 示例并不是每个人都喜欢的。
Head First Design Patterns 文本更易于访问,但仅包含四人组模式的一个子集。
最重要的是了解特定模式在何处以及为何有用。然后在网上搜索您选择的语言的实现示例并进行实验,直到您“得到它”。了解一种模式,然后再继续下一种模式。每个人都比其他人更了解某些模式(还有数百种鲜为人知的模式)。
继续插电。
【讨论】:
(来源:Amazon)
【讨论】:
Martin Fowler 的企业应用架构模式(精装本)
重构模式(精装本),Joshua Kerievsky
持续集成:提高软件质量和降低风险(平装本)作者 Paul Duval 等人。
超越软件架构:创建和维持成功的解决方案(平装本)作者 Luke Hohmann
【讨论】:
设计模式就像任何库函数一样,阅读它们,然后当出现问题时,设计模式将在您的“工具箱”中。有很多设计模式书籍都是按照最初的“四人帮”设计模式设计的。
对于任何程序员,我认为这和 Fowler 的重构书是绝对最低要求。
【讨论】:
对于网站,一个非常好的网站是http://ajaxpatterns.org,来自 ajaxian 网站的开发者之一
【讨论】:
Design Patterns 原版书是所有程序员的必读之书。
这是一本在各个层面上都非常出色的书:布局、清晰度、洞察力、深度。这是一本您首先从头到尾阅读的好书,然后用作参考,直到您真正了解它为止。
您可以从Wikipedia page 开始,但也可以用这本好书犒劳自己。
【讨论】:
Applying UML and Patterns 克雷格·拉曼。从分析的基础开始,设计和使用一个简单的Case场景。以简单的方式介绍了大部分基本模式。
【讨论】:
如果您阅读过设计模式,您会注意到 Java 似乎已经实现了其中的一些。
查看任何框架的源代码,您可以收集有关设计模式的信息。就我个人而言,我不认为它们完全适合我的任何代码,有时书籍和教程中的示例似乎有点理想化,尤其是对于孤独的编码人员。
设计模式不适合懒惰的程序员。
【讨论】:
对于我和我的同事来说,在 Pattern Study Group 上学习设计模式。他们准备了我们应该按顺序学习的每种模式的列表,并且还有一些开放性问题,可以在小组中进行更多讨论。
【讨论】:
我还建议您在阅读完 Head First Design Patterns 后在 Refactoring to Patterns 上转一下。
注意:代码示例是用 Java 编写的,但应该与 C# 示例非常相似...
【讨论】:
对于一个经验很少的人来说,深入研究设计模式对我来说没有太大意义。很高兴知道它们的存在,但此时您应该更多地关注其他事情,而不仅仅是学习设计模式。
它们在解决问题时很有用 - 作为一个新/初学者开发人员的概念,除了知道您应该在何时何地使用它们之外,它们实际上并没有太多实用价值。
编辑 澄清 - 许多设计模式是在某些领域发现的问题的结果。几乎不能指望新程序员(IMO)知道用于解决某些问题的设计模式。就像我们在 CS 研究中了解一些算法一样,我们需要了解我们可以用模式做的事情及其好处,但是当一个人仍在构建 hello world 或发现 stl 时,对设计模式的实际需求并不多。图案很棒。但它们不是灵丹妙药。
(CASE(工具)也不是,UML 也不是,SCRUM 也不是,TDD 也不是,STL 也不是,Java 也不是 XML 等。)这些都只是我们专业的方面,并处理这些主题因为第二次来太天真了。
【讨论】:
模式包含程序员用来讨论抽象设计的高级词汇。如果您正在重用一个抽象的解决方案,那么通过名称来引用它会很有帮助。如果你发明了一个模式,做一些检查以确保它还没有被命名是很专业的。如果已命名,则说明可能有用。
在您编写一点点代码之后,您会发现自己编写的代码与您之前编写的代码类似。这是一种模式。即使是微小的图案,也值得注意。有更好的模式吗?您是否看到某些微小的模式相互合作以解决更大的问题?下一次,当你想解决更大的问题时,整个模式会作为一个整体出现在你的脑海中。充实详细的代码行变得机械化。
您对模式的关注越多,编程就会变得越简单,您就越会欣赏其他程序员设计的一些最大和最好的模式。 尝试掌握 MVC 模式。不管怎样,变化无处不在,即使在微小的设计决策中也是如此。
【讨论】:
一旦您理解了这个概念,请仔细阅读 Eclipse 源代码或设计,这些模式的许多非常好的示例(毫不奇怪,Gamma 是设计者之一)。
【讨论】:
我发现这个网站上的设计模式文章非常容易理解
【讨论】: