【问题标题】:Learning/Implementing Design Patterns (For Newbies) [closed]学习/实施设计模式(针对新手)[关闭]
【发布时间】:2008-10-28 20:22:36
【问题描述】:

我是一个困惑的新手和业余程序员,试图掌握这一点,如果我的问题有点偏离或没有多大意义,请原谅我。

我看到很多关于 SO 的问题都围绕着设计模式的使用,我想知道是否有人有很好的资源来学习和实施设计模式?我了解总体思路,并且知道如何/何时使用其中的几个(单例、工厂方法),但我知道我错过了。

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

【问题讨论】:

    标签: oop design-patterns


    【解决方案1】:

    Head First Design Patterns

    Design Pattern Wikipedia page 是初学者的最佳资源。 FluffyCat 是另一个很好的免费在线资源,用于 JavaPHP 中的设计模式。

    Gang of Four book 是之后的去向,但它相当先进,所以我会等到你从其他资源中牢牢掌握。

    【讨论】:

    • msquaredweb.com/DesignPatterns/… 处提供 Head First Design Patterns 的 C# 代码示例
    • 我看了那本书……讨厌它。所以我拿起了 GoF 的书,并从中学习了所有关于设计模式的知识。它有点枯燥,但信息量更大。
    • 我最初认为 head first 的书会完全令人作呕(它大量的隐喻、旁白,而且语气非常健谈).. 但实际上它真的很有创意和信息量;我很高兴我冒险买了它。 Imo,选择四人组 = 不必要的受虐狂。
    • 我确实发现第一本书完全令人作呕。它花了很多时间“有趣”,我认为它传达的关键思想很糟糕——他们迷失了。阅读它就像看着某人的爸爸试图变得很酷。但 GoF 书是另一个极端,因此并不适合所有人。
    • @Bill:我知道,但我同意@Thomas 和@Draemon 的cmets。我的非编程方向的朋友被推荐了这一系列关于编程类算法的书籍,讨厌它们并最终选择了“枯燥”的书籍,因为每页的信息量更高。这只是一个偏好问题。我从小就读技术书籍,上了一所技术含量高的高中,这一定让我习惯了阅读“枯燥”的书籍。我更喜欢没有宠物对我说话和偏离轨道的书,而是让我吸收的简单信息。
    【解决方案2】:

    设计模式之所以很棒有多种原因:

    1. 让您开始解决常见问题。
    2. 为开发人员提供了一个词汇表,以非常紧凑的方式讨论解决问题的某些方法。
    3. 与了解设计模式并且您在解决方案中使用设计模式的开发人员合作时,他们会更快地了解解决方案。

    但是当您的目标只是学习设计模式时,我认为您缺少基础知识。所有设计模式都基于更常见的原则。高内聚、低耦合开闭原则、DRY、Liskov 替换原则等。对于这些基本原理,我将按此顺序阅读以下书籍:

    1. Head First Object-Oriented Analysis and Design (Head First) [ILLUSTRATED] (Paperback)
    2. Applying UML and Patterns (Hardcover)
    3. Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series) (Hardcover)

    之后,您就可以开始学习四种设计模式的基本组合了

    1. Head First Design Patterns (Head First) [ILLUSTRATED] (Paperback)
    2. The BIBLE
    3. 一个不错的网站(什么都不买,不值得)http://dofactory.com/Patterns/Patterns.aspx(该网站的一些实现值得讨论

    下一步:

    1. Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) (Hardcover)
    2. The POSA books

    永远记住:模式不是目标!

    【讨论】:

    • 我认为OO的基础知识(封装、继承、多态等)足以开始学习设计模式的知识。您可以通过学习模式学习其他原则(高内聚、低耦合开闭原则、DRY、里氏替换原则等)。
    • 我同意你可以只用 OO 的基础知识来学习设计模式。但是后来你做到了,你可以让一个模式工作,但还没有完全理解为什么这是一个好的设计,你做了什么权衡以及如何在模式中做出变化。
    【解决方案3】:

    我要补充一点,“四人帮”中的 Design Patterns 书对于任何对设计模式非常感兴趣的人来说都是一本圣经。

    【讨论】:

    • 或者对于任何想告诉他们的程序员朋友他们已经读过四人帮的书的人:)
    【解决方案4】:

    我的建议:

    大量阅读来自不同来源的模式。

    尝试将尽可能多的模式强制到您正在编写的所有代码中,因为这一点不会产生好的结果。相反,让信息在你的大脑中停留一段时间(阅读:几个月)。

    突然间,您会发现自己遇到了一个问题或一段代码,并且您会模糊地记得您已经看到了一些可以解决这个特定问题的方法。现在是时候查看您正在考虑的模式的详细信息并尝试应用它了。

    无论如何,这对我有用。

    【讨论】:

      【解决方案5】:

      Design Patterns

      本教程站点包含以下子部分

      • 每种设计模式的意图
      • 设计模式的真实世界结构
      • 问题陈述
      • 问题详细讨论
      • 清单关于如何达成一个模式
      • 经验法则同时达到模式。
      • Code sn-ps 用于设计模式,包括 C#、C++、Delphi、Java 和 PHP

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

      【讨论】:

      • 我发现网站非常有用。好的、清晰的例子。
      【解决方案6】:

      Bruce Eckel 有一个book on design patterns,虽然它是 Java,但它就像他所有的书一样令人惊叹。最棒的是,它们是免费的!

      【讨论】:

      • 感谢您提供的链接,没想到这是免费在线提供的。
      【解决方案7】:

      C# 3.0 Design Patterns 了解设计模式的 C# 视角。


      (来源:oreilly.com

      【讨论】:

        【解决方案8】:

        我觉得有用且写得很好的入门书是 Design Patterns Explained Alan Shalloway 和 James Trott (Addison Wesley)。

        不要Gang of Four这本书开始,因为它无论如何都不是一本介绍性的书。

        【讨论】:

          【解决方案9】:

          我建议您查看 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

          【讨论】:

          • DnrTV 已关闭!太可惜了,因为 Boodhoo 的屏幕录像内容丰富。您是否看过其他地方托管的视频?你有视频文件吗,我很乐意让它们在线。
          【解决方案10】:

          对上述 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

          希望对你有帮助

          【讨论】:

            【解决方案11】:

            Head First Design Patterns 是一个很好的设计模式,就像其他已经提到的那样。除此之外,当然还有原著和 C# 设计模式。还有已经提到的好网站。

            除了自学之外,我强烈建议您开始或参加您所在地区的模式研究小组。请参阅A Learning Guide To Design Patterns 以获得解释和研究模式的良好顺序。我们这样做了,老实说,我不会像现在这样理解。每周与其他感兴趣的人开会,让您在学习设计模式等抽象知识时,会出奇的自律。

            学习愉快!

            【讨论】:

              【解决方案12】:

              在花钱买书之前,我会推荐维基百科优秀的design patterns 页面。也可以通过谷歌搜索“设计模式截屏视频”或在YouTube 上搜索“设计模式”。以不同的方式呈现相同的信息通常有助于降低成本。

              Gang of Four 这本书是关于最知名模式的权威文本,但并不那么容易阅读,而且 C++ 示例并不是每个人都喜欢的。

              Head First Design Patterns 文本更易于访问,但仅包含四人组模式的一个子集。

              最重要的是了解特定模式在何处以及为何有用。然后在网上搜索您选择的语言的实现示例并进行实验,直到您“得到它”。了解一种模式,然后再继续下一种模式。每个人都比其他人更了解某些模式(还有数百种鲜为人知的模式)。

              继续插电。

              【讨论】:

                【解决方案13】:


                (来源:Amazon

                【讨论】:

                  【解决方案14】:

                  Martin Fowler 的企业应用架构模式(精装本)

                  重构模式(精装本),Joshua Kerievsky

                  持续集成:提高软件质量和降低风险(平装本)作者 Paul Duval 等人。

                  超越软件架构:创建和维持成功的解决方案(平装本)作者 Luke Hohmann

                  【讨论】:

                    【解决方案15】:

                    设计模式就像任何库函数一样,阅读它们,然后当出现问题时,设计模式将在您的“工具箱”中。有很多设计模式书籍都是按照最初的“四人帮”设计模式设计的。

                    对于任何程序员,我认为这和 Fowler 的重构书是绝对最低要求。

                    【讨论】:

                    • POSA 书籍并非“仿照 GOF”书籍 - GOF 恰好是第一个出版的 - 它们同时在生产中。
                    • 为了避免混淆,我想说大多数设计模式不是在库中实现的。许多模式是通过将库类组合在一起形成的。
                    • 我确实让它听起来像是可以在图书馆里完成的——对此很抱歉,谢谢你的澄清,比尔。设计模式通常是 LIKE 库,但您通常不能将其放入库中——例如彼此未知的类交互的不同方式。
                    【解决方案16】:

                    对于网站,一个非常好的网站是http://ajaxpatterns.org,来自 ajaxian 网站的开发者之一

                    【讨论】:

                      【解决方案17】:

                      Design Patterns 原版书是所有程序员的必读之书。

                      这是一本在各个层面上都非常出色的书:布局、清晰度、洞察力、深度。这是一本您首先从头到尾阅读的好书,然后用作参考,直到您真正了解它为止。

                      您可以从Wikipedia page 开始,但也可以用这本好书犒劳自己。

                      【讨论】:

                        【解决方案18】:

                        Applying UML and Patterns 克雷格·拉曼。从分析的基础开始,设计和使用一个简单的Case场景。以简单的方式介绍了大部分基本模式。

                        【讨论】:

                          【解决方案19】:

                          如果您阅读过设计模式,您会注意到 Java 似乎已经实现了其中的一些。

                          查看任何框架的源代码,您可以收集有关设计模式的信息。就我个人而言,我不认为它们完全适合我的任何代码,有时书籍和教程中的示例似乎有点理想化,尤其是对于孤独的编码人员。

                          设计模式不适合懒惰的程序员。

                          【讨论】:

                            【解决方案20】:

                            对于我和我的同事来说,在 Pattern Study Group 上学习设计模式。他们准备了我们应该按顺序学习的每种模式的列表,并且还有一些开放性问题,可以在小组中进行更多讨论。

                            【讨论】:

                              【解决方案21】:

                              我还建议您在阅读完 Head First Design Patterns 后在 Refactoring to Patterns 上转一下。

                              注意:代码示例是用 Java 编写的,但应该与 C# 示例非常相似...

                              【讨论】:

                                【解决方案22】:

                                对于一个经验很少的人来说,深入研究设计模式对我来说没有太大意义。很高兴知道它们的存在,但此时您应该更多地关注其他事情,而不仅仅是学习设计模式。

                                它们在解决问题时很有用 - 作为一个新/初学者开发人员的概念,除了知道您应该在何时何地使用它们之外,它们实际上并没有太多实用价值。

                                编辑 澄清 - 许多设计模式是在某些领域发现的问题的结果。几乎不能指望新程序员(IMO)知道用于解决某些问题的设计模式。就像我们在 CS 研究中了解一些算法一样,我们需要了解我们可以用模式做的事情及其好处,但是当一个人仍在构建 hello world 或发现 stl 时,对设计模式的实际需求并不多。图案很棒。但它们不是灵丹妙药。

                                (CASE(工具)也不是,UML 也不是,SCRUM 也不是,TDD 也不是,STL 也不是,Java 也不是 XML 等。)这些都只是我们专业的方面,并处理这些主题因为第二次来太天真了。

                                【讨论】:

                                • 但是如果您不了解这些模式,您将不知道是否有一种模式可以解决您的特定问题。是的,作为新手,您不太可能需要模式,但在需要出现之前了解模式很重要。
                                • 我想我已经在我的帖子中提到了这一点......
                                • 你需要的不仅仅是知道它们的存在......你需要知道它们是如何工作的以及它们被使用的情况。这比肤浅的知识多一点。您可能需要数年才能使用一种模式,但当您这样做时,就不是学习该模式的时候了。
                                • 所以你是说新手必须学习和理解几十个或更多的模式?在此期间有什么问题?我并不是在反对模式。而且我也不认为学习模式 JIT 的细节是一件坏事。在其他东西 IMO 之前学习模式没有用
                                【解决方案23】:

                                模式包含程序员用来讨论抽象设计的高级词汇。如果您正在重用一个抽象的解决方案,那么通过名称来引用它会很有帮助。如果你发明了一个模式,做一些检查以确保它还没有被命名是很专业的。如果已命名,则说明可能有用。

                                在您编写一点点代码之后,您会发现自己编写的代码与您之前编写的代码类似。这是一种模式。即使是微小的图案,也值得注意。有更好的模式吗?您是否看到某些微小的模式相互合作以解决更大的问题?下一次,当你想解决更大的问题时,整个模式会作为一个整体出现在你的脑海中。充实详细的代码行变得机械化。

                                您对模式的关注越多,编程就会变得越简单,您就越会欣赏其他程序员设计的一些最大和最好的模式。 尝试掌握 MVC 模式。不管怎样,变化无处不在,即使在微小的设计决策中也是如此。

                                【讨论】:

                                  【解决方案24】:

                                  一旦您理解了这个概念,请仔细阅读 Eclipse 源代码或设计,这些模式的许多非常好的示例(毫不奇怪,Gamma 是设计者之一)。

                                  【讨论】:

                                    【解决方案25】:

                                    我发现这个网站上的设计模式文章非常容易理解

                                    Design Patterns in C#

                                    【讨论】:

                                      猜你喜欢
                                      • 2010-09-23
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2016-02-17
                                      • 2011-10-05
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多