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

88

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

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

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

25个回答

3
在购买书籍之前,我建议您查阅维基百科上关于设计模式的优秀页面。此外,您还可以通过谷歌搜索“设计模式视频教程”或在YouTube上搜索“设计模式”来寻找不同的学习方式。以不同的方式呈现相同的信息通常有助于理解。 四人帮的书是最著名的设计模式文本,但并不容易阅读,而且使用C++示例,不是每个人都喜欢。 Head First 设计模式这本书更易于理解,但只包含了部分四人帮的设计模式。
最重要的是要理解特定模式何时以及为什么有用。然后在您选择的编程语言中搜索实现示例并进行实验,直到您完全掌握它。在进入下一个模式之前,请先理解一个模式。每个人对某些模式的理解比其他模式更好(还有数百个较不知名的模式)。
请继续努力。

3

3

《Head First设计模式》是一本很好的书,像其他人已经指出的那样。除此之外,当然还有原版书和C#设计模式。另外也有一些好的网站已经被提到。

除了自学之外,我强烈建议在您所在地区开始或参加一个模式学习小组。请参见《设计模式学习指南》,以了解模式的学习顺序和详细解释。我们做到了这一点,我可以诚实地说,现在我不可能理解得比我现在更多了。与其他感兴趣的人每周开会,在学习像设计模式这样抽象的东西时,让您惊讶地保持纪律性。

祝学习愉快!


2

我和我的同事们参加了设计模式学习小组,他们为我们准备了每个模式的学习顺序列表,并提供开放性问题以促进小组讨论。


2

企业应用架构模式(硬皮书)Martin Fowler著

重构到模式(硬皮书)Joshua Kerievsky著

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

超越软件架构:创建和维护成功的解决方案(平装书)Luke Hohmann著


2

设计模式就像任何库函数一样,先了解它们,当问题出现时,设计模式将在您的“工具箱”中。有许多设计模式书籍都是根据最初的“四人帮”设计模式而编写的。

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


POSA系列书籍并不是“仿照GOF”编写的 - GOF恰好是第一本出版的 - 它们是同时制作的。 - Tim
1
仅为避免任何混淆,我想说大多数设计模式并没有在库中实现。许多模式是通过将库类组合在一起形成的。 - Bill the Lizard
我之前可能让人误以为这些可以在库中完成,对此感到抱歉,感谢您的澄清,比尔。设计模式通常类似于库,但有些东西通常无法放入库中——例如未知类之间交互的不同方式。 - Bill K

2

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


2
原文:

The original Design Patterns book is a must-read for all programmers.

It is an excellent book on every level: layout, clarity, insight, depth. It's one of those great books that you first read cover-to-cover, and then use as a reference until you literally know it inside out.

You could start by the Wikipedia page, but treat yourself with the great book too.

翻译:《设计模式》这本书是所有程序员必读的。无论从版面、清晰度、洞察力还是深度来看,它都是一本优秀的书籍。这是那种你可以先从头到尾阅读,然后再将其作为参考书使用,直到你真正了解它的内部构造。你可以从维基百科页面开始阅读,但也请不要错过这本伟大的书。

2

应用UML和模式,作者是Craig Larman。从分析、设计的基础开始,采用简单的案例场景进行讲解。以简单易懂的方式介绍了大部分基本模式。


2
如果你阅读关于设计模式的文章,你会发现Java似乎实现了一些。查看任何框架的源代码,你可以了解到关于设计模式的信息。个人认为它们并不完全适用于我的代码,有时书籍和教程中的示例似乎有点理想化,特别是对于一个孤独的程序员。设计模式不是给懒惰的程序员准备的。

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