学习/实现设计模式(新手指南)

88

我是一个迷茫的新手和爱好者程序员,试图掌握这方面的知识,如果我的问题有点偏离或不太合理,请原谅。

我在SO上看到很多关于使用设计模式的问题,我想知道有没有好的资源可以学习和实现设计模式?我了解一般的思路,并知道如何/何时使用其中的几种(Singletons、工厂方法),但我知道我还有很多东西需要学习。

(只是以防万一,我的首选语言是C#,但我也可以从其他语言的例子中学习)

25个回答

85

4
Head First Design Patterns 的 C# 代码示例可以在 http://www.msquaredweb.com/DesignPatterns/HeadFirstDesignPatternsInCSharp.zip 上找到。 - toolkit
6
我看了那本书...讨厌极了。于是我拿起GoF的书,从中学习了所有关于设计模式的内容。那本书有点枯燥,但更加详尽。 - Thomas Owens
2
我发现《Head First》这本书完全让人感到恶心。它花费了大量时间来追求“有趣”,结果导致核心思想表达不清——被埋没了。阅读它就像看某个人的父亲试图变酷一样。但《设计模式》这本书则是另一个极端,因此并非所有人都适合阅读。 - Draemon
1
对不起,但我真的很讨厌《Head First》系列,它对我的口味来说太过简化了。 - Esteban Küber
2
@Bill:我知道,但我同意@Thomas和@Draemon的评论。我的非编程朋友曾经因为推荐这一系列算法编程课程的书籍而讨厌它们,并最终选择了“干巴巴”的书籍,因为每页的信息量更大。这只是个人偏好问题。我从小就开始阅读技术书籍,并上了一所高度技术化的高中,这使我习惯于阅读“干巴巴”的书籍。我更喜欢那些没有宠物对我说话或离题的书籍,而是提供简单信息让我吸收的书籍。 - Esteban Küber
显示剩余14条评论

29

设计模式有很多好处:

  1. 为解决常见问题提供了一个起点。
  2. 为开发人员提供了一种用简洁方式谈论问题解决方法的词汇表。
  3. 当与熟悉设计模式的开发人员共同工作并在解决方案中使用设计模式时,他们会更快地理解这些解决方案。

但是,如果你的目标只是学习设计模式,那么我认为你正在错过基础知识。所有设计模式都基于更常见的原则。高内聚、低耦合、开闭原则、DRY、里氏替换原则等等。关于这些基本原则,我建议按以下顺序阅读以下书籍:

  1. 《Head First 面向对象分析与设计》(Head First)[插图版](平装)
  2. 《应用UML和模式》(精装)
  3. 《C#敏捷原则、模式与实践》(Robert C. Martin系列)(精装)

之后,您就可以了解基本的四人帮设计模式。

  1. 《Head First 设计模式》(Head First)[插图版](平装)
  2. 这是圣经
  • 一个漂亮的网站(不要购买任何东西,不值得)http://dofactory.com/Patterns/Patterns.aspx(该网站的一些实现值得讨论)。
  • 接下来:

    1. 《企业应用架构模式》(Addison-Wesley Signature Series)(精装本)
    2. POSA 书籍

    记住:设计模式并非目标!


    2
    我认为面向对象的基础知识(封装、继承、多态等)足以开始学习设计模式。您可以通过学习模式来了解其他原则(高内聚、低耦合开闭原则、DRY、里氏替换原则等)。 - Bill the Lizard
    我同意你可以只通过面向对象的基础知识学习设计模式。但这样做只能让你使一个模式起作用,而不能完全理解为什么这是良好的设计,你做出了哪些权衡以及如何在模式中进行变化。 - KeesDijk

    21

    我想补充的是,“四人帮”所著的《设计模式》这本书对于任何真正对设计模式感兴趣的人来说都是必读经典。


    14
    或者,对于任何想告诉他们的程序员朋友们自己已经读过《设计模式》(Gang of Four)这本书的人 :) - Dave Markle

    15

    我的建议:

    从不同的来源阅读大量关于设计模式的内容。

    在编写代码时,试图尽可能多地强制使用所有的设计模式是不会带来好的结果的。相反,让这些信息在你的大脑中沉淀一段时间(即几个月)。

    突然间,你会遇到一个问题或者一段代码,你依稀记得你看过一些东西可以作为解决这个特定问题的方法。现在是查找你想要应用的设计模式细节并尝试应用它的时候了。

    这就是对我有效的方法。


    9

    设计模式

    本教程网站包含以下子部分:

    • 每个设计模式的意图
    • 设计模式的真实结构
    • 问题陈述
    • 对问题的详细讨论
    • 如何到达模式的检查清单
    • 到达模式时的经验法则
    • 包括C#,C ++,Delphi,Java和PHP在内的设计模式的代码片段

    本网站还包含有关反模式UML重构的指南。


    我发现这个网站非常有用。例子很好,清晰易懂。 - Augustas

    8

    Bruce Eckel有一本关于设计模式的书籍,虽然是Java方面的,但像他所有的书一样令人惊叹。最好的事情是,它们都是免费的!


    谢谢提供链接,我没有意识到它可以在网上免费获取。 - James McMahon

    6

    5
    我发现一本有用且写得很好的入门书是《设计模式解析》(Alan Shalloway 和 James Trott 著,Addison Wesley 出版)。Design Patterns Explained

    alt text

    不要从四人帮的书开始阅读,因为它绝对不是一本入门书。


    4

    对以上评论的注解。

    GOF设计模式快速参考

    这里是一个不错的起点:dofactory.com/patterns/patterns.aspx - 你可以找到每个模式的链接以及相应的实现。

    然而,记住这些都是GOF模式。一旦你在OOAD方面获得足够的专业知识,还可能需要阅读和理解高级模式。《Head First设计模式》是一个很好的起点,进展一段时间后,再去看Martin Fowler的《企业应用架构模式》。

    应用设计模式-思维过程

    另一个主要方面-应用设计模式与仅仅了解它们一样重要。阅读这些文章也可能对你有所帮助。

    应用设计模式第I部分

    应用设计模式第II部分

    希望这能有所帮助。


    4
    我建议您查看Jean Paul Boodhoo在DNRtv上的《揭秘设计模式》五部曲,以下是链接。这些视频涉及单例、抽象工厂等模式,与其他资源不同之处在于您可以观看他演示编码并讨论理论。在一个下雨的工作日午餐时间收看非常不错。
    链接如下: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

    DnrTV挂了!这太可惜了,因为Boodhoo的屏幕录像非常有信息量。你在其他地方看过这些视频吗?你有视频文件吗?我很乐意将它们保持在线。 - Stephan Luis

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接