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

88

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

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

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

25个回答

1

一旦你理解了这个概念,就可以浏览Eclipse源代码或设计,有很多这些模式的真正好例子(毫不奇怪,Gamma是其中之一的设计师)。


1

1

对于经验很少的人来说,深入研究设计模式并没有太多意义。了解它们的存在是很好的,但此时你应该更加关注其他事情,而不仅仅是学习设计模式。

在问题的背景下,它们是有用的 - 作为新手开发者的概念,它们实际上并没有太多实用价值,除了知道在何时何地可以使用它们。

编辑 为了澄清 - 许多设计模式都是某些领域中发现的问题的结果。一个新的程序员几乎不可能(在我看来)知道要为一些问题集使用哪些设计模式。就像我们在计算机科学研究中获得了一些算法的基础知识一样,我们需要了解我们可以使用模式做什么以及它们的好处,但当一个人还在构建“Hello World”或发现STL时,并没有太多实际需要设计模式。模式很棒。但它们不是万能药。

(CASE(工具)也不是,UML也不是/曾经不是,SCRUM也不是,TDD也不是,STL也不是,Java也不是,XML等等。)这些都只是我们职业生涯的方面,把这些主题视为第二次来临是幼稚的。


但是,如果您不了解这些模式,您就不知道是否存在一个可以解决您特定问题的模式。是的,作为新手,您可能不需要使用一种模式,但在这种需求出现之前学习模式非常重要。 - Elie
我认为我在我的帖子中已经涵盖了这个问题... - Tim
你需要的不仅仅是知道它们的存在......你需要知道它们是如何工作的,以及它们被使用的情况。这比表面知识多了一点。也许在你使用某种模式之前会过上几年,但当你真正使用时,学习模式的时间已经不够了。 - Elie
那么您是说新手必须学习和理解数十个甚至更多的设计模式?与此同时要放弃什么呢?我并不是反对使用设计模式。我也不认为即时学习某种具体的设计模式是一件坏事。但在学习其他东西之前学习设计模式在我看来没有什么用处。 - Tim

1

我建议在阅读《Head First设计模式》后,再看一下重构到模式

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


1

模式是程序员用来谈论抽象设计的高级词汇。如果您正在重复使用一个抽象解决方案,通过名称引用它会很有帮助。如果您发明了一个模式,最好进行一些检查以确保它没有被命名过。如果已经被命名,则该描述可能很有用。

即使只是编写了一点代码,您也会注意到自己在编写与之前相似的内容。这就是一个模式。即使它是一个微小的模式,也值得注意。是否有更好的模式?您是否看到某些微小的模式合作解决了更大的问题?那么下次,当您想要解决更大的问题时,整个模式将作为一个单一的块出现在您的脑海中。详细的代码行变得机械化。

您越注意模式,编程就越容易,并且您将更加欣赏其他程序员制定的一些最大和最佳的模式。尝试掌握MVC模式。无论如何,各种变体都会出现在各个地方,甚至在微小的设计决策中。


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