我是一个迷茫的新手和业余爱好者程序员,试图抓住这个,所以请原谅我,如果我的问题有点过分或没有多大意义。
关于设计模式的使用,我看到很多关于SO的问题,我想知道是否有人有很好的资源来学习和实现设计模式?我理解一般的想法,知道如何/何时使用它们(单身人士,工厂方法),但我知道我错过了。
(如果重要,我的偏好语言是C#,但我可以从其他语言的例子中学习)
答案 0 :(得分:84)
并且Design Pattern Wikipedia page是初学者的最佳资源。 FluffyCat是Java和PHP中设计模式的另一个优秀免费在线资源。
Gang of Four book之后会去哪里,但它相当先进,所以我要等到你对其他资源的掌握非常牢固。
答案 1 :(得分:27)
由于各种原因,设计模式很棒:
但是当你的目标只是学习设计模式时,我认为你错过了基础知识。所有设计模式都基于更常见的原则。高内聚,低耦合开放闭合原则,DRY,Liskov替代原则等。对于这些基本原则,我将按此顺序阅读以下书籍:
之后,您已准备好接受四种设计模式的基本组合
下一步:
答案 2 :(得分:20)
我想补充一下,对于那些对设计模式非常感兴趣的人来说,“四人帮”中的Design Patterns书是一本圣经。
答案 3 :(得分:14)
我的提示:
阅读不同来源的模式。
尝试将尽可能多的模式强制转换为您正在编写的所有代码,因为这一点不会产生良好的结果。相反,让信息在你的大脑中停留一段时间(阅读:几个月)。
突然间你会发现自己遇到问题或代码片段,你会隐约记得你已经看到了一些可以解决这个问题的方法。现在是时候查看您正在考虑的模式的细节并尝试应用它。
无论如何,这对我有用。
答案 4 :(得分:9)
本教程网站包含以下小节
此网站还包含反模式, UML 和重构的指南。
答案 5 :(得分:8)
Bruce Eckel有一个book on design patterns,虽然它是Java,但它的所有书都很棒。最棒的是,他们是免费的!
答案 6 :(得分:7)
C# 3.0 Design Patterns了解设计模式的C#视角。
(来源:oreilly.com)
答案 7 :(得分:5)
我发现有用且写得很好的介绍性书籍 {3}由Alan Shalloway和James Trott(Addison Wesley饰演)。
不从Design Patterns Explained书开始,因为它不是介绍性书籍。
答案 8 :(得分:4)
上述评论的注释。
GOF模式的快速参考
这是一个你可以开始的好地方dofactory.com/patterns/patterns.aspx - 你可以找到每个模式的链接,以及相应的实现。
但是,请记住这些是GOF模式。一旦获得足够的OOAD专业知识,您可能还需要阅读和理解高级模式。 Head First Design Patterns是一个良好的开端,在取得一些进展后,请使用Martin Fowler的企业应用程序架构模式。
应用设计模式 - 思考过程
另一个主要方面 - 应用设计模式与了解它们同样重要。阅读这些文章也可能对你有帮助。
Applying Design Patterns Part I
Applying Design Patterns Part II
希望这有帮助
答案 9 :(得分:4)
我建议看一下Jean Paul Boodhoo关于DNRtv上的揭秘设计模式的quintology(?),下面提供的网址。视频广播涉及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
答案 10 :(得分:3)
在花钱买书之前,我会推荐维基百科的优秀design patterns页面。也适用于不同的Google用于“设计模式截屏视频”或在YouTube上搜索“设计模式”。以不同的方式呈现相同的信息通常有助于减少便士。
Gang of Four书是关于最知名模式的权威文本,但并不容易阅读,而且C ++示例并不是每个人都喜欢的。
Head First Design Patterns文本更易于访问,但仅包含“四人帮”模式的子集。
最重要的是要了解特定模式的用途和原因。然后在网上搜索您选择的语言的实施示例并进行实验,直到您“得到它”。在继续下一个模式之前先了解一种模式。每个人都比其他人更了解某些模式(并且有数百个鲜为人知的模式)。
请继续关闭。
答案 11 :(得分:3)
Head First Design Patterns与其他人已经注意到的一样好。除此之外,当然还有原书和C#设计模式。还有很好的网站已经提到过。
除了自学,我还是认真地建议您开始或参加您所在地区的模式学习小组。请参阅A Learning Guide To Design Patterns以获得解释和很好的顺序来研究模式。我们这样做了,老实说,我不会像现在这样理解。每周与其他感兴趣的人会面会让你在学习像设计模式这样抽象的东西时会受到惊人的训练。
快乐学习!
答案 12 :(得分:3)
(来源:Amazon)
答案 13 :(得分:2)
如果您阅读有关设计模式的信息,您会发现Java似乎已经实现了一些。
查看任何框架的源代码,您可以收集有关设计模式的信息。我个人认为它们并不完全符合我的任何代码,有时书籍和教程中的例子似乎有点理想化,特别是对于单独的编码器。
设计模式不适用于懒惰的编码器。
答案 14 :(得分:2)
Applying UML and Patterns。从分析,设计和使用简单案例场景的基础开始。以简单的方式介绍大多数基本模式。
答案 15 :(得分:2)
原始的Design Patterns书是所有程序员必读的。
这是一本关于每个层面的优秀书籍:布局,清晰度,洞察力,深度。这是你第一次阅读封面的好书之一,然后作为参考使用,直到你完全知道它为止。
你可以从Wikipedia page开始,但也要用这本好书来对待自己。
答案 16 :(得分:2)
对于网站,一个非常好的网站是http://ajaxpatterns.org,来自ajaxian网站的开发者之一
答案 17 :(得分:2)
我和我的同事们研究了Pattern Study Group之后的设计模式。他们准备了我们应该按顺序学习的每个模式的列表,并且还有一些开头的问题可以在小组中进行更多的讨论。
答案 18 :(得分:2)
设计模式就像任何库函数一样,阅读它们,然后当出现问题时,设计模式将出现在“Toolchest”中。有许多设计模式书籍都是在最初的“四人帮”设计模式之后形成的。
对于任何程序员来说,我认为和Fowler的重构书是绝对的最低要求。
答案 19 :(得分:2)
Martin Fowler的企业应用程序架构模式(精装)
Joshua Kerievsky重构模式(精装)
持续整合:提高软件质量和降低风险(平装)Paul Duval et.al。
超越软件架构:由Luke Hohmann创建并维持获奖解决方案(平装本)
答案 20 :(得分:1)
我还建议您在阅读Head First Design Patterns之后在Refactoring to Patterns获得一个shufty。
注意:代码示例使用Java,但应与C#示例非常相似......
答案 21 :(得分:1)
模式包括程序员用来谈论抽象设计的高级词汇。如果要重用抽象解决方案,按名称引用它会很有帮助。如果您发明了一个模式,那么进行一些检查以确保它尚未被赋予名称是专业的。如果它已被命名,那么描述可能是有用的。
在你编写一小段代码之后,你会发现自己写了类似于之前编码的东西。这是一种模式。即使它是一个很小的模式,也值得注意。有更好的模式吗?您是否看到某些微小模式协同工作以解决更大的问题?那么下次,当你想解决更大的问题时,整个模式作为一个单块进入你的脑海。充实细节的代码行变得机械化。
您注意到的模式越多,编程就越容易,您会越欣赏其他程序员制定的一些最大和最好的模式。 尝试掌握MVC模式。无论如何,即使在微小的设计决策中,变化也会出现在各处。
答案 22 :(得分:1)
对于那些经验不足以深入研究设计模式的人来说,这对我来说没有多大意义。很高兴知道它们存在,但此时你应该更多地关注其他事情,而不仅仅是学习设计模式。
它们在问题的背景下是有用的 - 作为新/初学者开发者的概念,除了知道你应该随时随地使用它们之外,它们实际上并没有太多的实用价值。
EDIT 澄清一下 - 许多设计模式是某些领域中出现问题的结果。很难想象一个新的程序员(IMO)知道用于某些问题的设计模式。就像我们在CS研究中获得一些算法一样,我们需要了解我们可以对模式及其好处做些什么,但是当一个人仍在构建问候世界或发现stl时,对设计模式的实际需求并不多。模式很棒。但它们不是银弹。
(既不是CASE(工具),也不是UML,也不是SCRUM,也不是TDD,也不是STL,也不是Java,也不是XML等。)这些都只是我们专业的一部分并且对待这些主题因为第二次来是天真的。
答案 23 :(得分:1)
一旦理解了这个概念,就可以看看Eclipse源代码或设计,这些模式的很多很好的例子(毫不奇怪,Gamma是设计师之一)。
答案 24 :(得分:1)
我发现本网站上的设计模式文章非常容易理解