如何研究设计模式? [关闭]

我已经阅读了大约4-5本有关设计模式的书籍,但我仍然认为我没有接近设计模式的中级水平?

我该如何去研究设计模式?

有没有关于设计模式的好书?

我知道这只会有经验,但必须有一些方法来掌握这些?

回答(22)

3 years ago

对于书籍,我建议Design Patterns ExplainedHead First Design patterns . 要真正了解这些模式,您应该查看现有代码 . 寻找您已经使用的模式 . 看看code smells以及可以解决它们的模式 .

3 years ago

Derek Banas为我喜欢的设计模式制作了youtube教程:

http://www.youtube.com/playlist?list=PLF206E906175C7E07

它们可能有点短,但他的时间和表现使他们非常乐于学习 .

3 years ago

阅读设计模式,练习编码它们的想法并不能真正帮助IMO . 当您阅读这些书籍时1.寻找特定设计模式解决的基本问题,从Creational Patterns开始是您最好的选择 . 2.我确信你已经编写过代码,分析你是否遇到了设计模式旨在提供解决方案的相同问题 . 3.尝试重新设计/重新设计代码或者重新开始 .

关于资源,您可以检查这些

  • www.dofactory.com

  • 设计模式:Erich Gamma,Richard Helm,Ralph Johnson和John M. Vlissides的可重复使用的面向对象软件(Addison-Wesley专业计算系列)的元素

  • Martin Fowler的企业应用程序架构模式

1是快速入门,2将深入研究.3将解释或应该让你认为你在2中学到的东西适合企业软件 .

我的2美分......

3 years ago

我阅读了三本书,但在我阅读OReilly的Head First Design Patterns之前,我仍然不太了解模式 . 这本书睁开眼睛,真的很好解释 .

alt text

3 years ago

我推荐HeadFirst DesignPattern . 读完这本书是不够的,在吸收了你需要的概念之后,找出你心中出现的很多问题的答案,并尝试找出可以使用这些模式的真实生活应用 . 我也这样做,并开始提问,即使这些问题看起来很傻 .

3 years ago

我认为研究设计模式也很困难 . 您必须了解有关OOP的更多信息以及中型到大型应用程序开发的一些经验 . 对我来说,我作为一组开发人员进行研究以进行讨论 . 我们按照A Learning Guide To Design Patterns完成了模式研究 . 有C#和JavaScript开发人员加在一起 . 对我来说很奇怪的是,JavaScript中的C#开发人员编写代码,而JavaScript开发人员对C#代码执行相同的操作 . 我离开 Session 后,我也在家里研究和阅读一些书籍进行审查 . 理解更多并记住我的更好方法是在这里使用C#和JavaScript中的示例进行博客http://tech.wowkhmer.com/category/Design-Patterns.aspx .

我先建议在去每个设计模式之前,先了解模式的名称 . 此外,如果有人知道这个概念,请解释并举一个例子,不仅仅是编程,而是在阅读世界 .

例如:

工厂方法:

阅读世界:我只需要花5美元,10美元或20美元就可以 生产环境 比萨饼而不知道它是如何 生产环境 的,我只需要根据钱投入获得小型,中型或大型比萨饼,这样我就可以吃或做任何事情 .

编程:客户端只需将参数值$ 5,$ 10或$ 20传递给factory方法,它将返回Pizza对象 . 因此,客户端可以使用该对象而无需了解其处理方式 .

我不确定这可以帮到你 . 这取决于人们加入 Session 的知识水平 .

3 years ago

我认为你需要检查一下你作为开发人员遇到的一些问题,在你因为另一次设计更改而不得不第10次修改你的代码之后你把头发拉了出来 . 你可能有一个项目列表,你觉得有很多返工和痛苦 .

从该列表中,您可以派生出设计模式要解决的场景 . 您是否曾经需要在不同的数据集上执行相同的一系列操作?您是否需要能够为应用程序提供未来功能,但又希望避免为现有类重新编写所有逻辑?从这些场景开始,返回模式目录及其应解决的各自问题 . 您可能会在GoF和项目库之间看到一些匹配 .

3 years ago

对于这样一个老问题我的两分钱

有些人已经提到过,练习和重构 . 我相信学习模式的正确顺序是这样的:

  • 学习测试驱动开发(TDD)

  • 学习重构

  • 学习模式

大多数人忽略1,许多人认为他们可以做2,而且几乎所有人都会直接选择3 .

对我来说,提高我的软件技能的关键是学习TDD . 这可能是一段很长时间的痛苦并且编码速度慢,但首先编写测试肯定会让你对代码有很多想法 . 如果一个课程需要太多样板或容易打破,你会开始注意到难闻的气味

TDD的主要好处是您不必担心重构代码并迫使您编写高度独立且具有凝聚力的类 . 没有一套好的测试,触摸一些没有破坏的东西真是太痛苦了 . 使用安全网,您将真正冒险进入代码的重大变化 . 那是你真正开始从实践中学习的那一刻 .

现在,您必须阅读有关模式的书籍,而且我认为,完全浪费时间去努力 . 在注意到我做了类似的事情后,我才真正理解模式,或者我可以将其应用于现有代码 . 如果没有安全测试或重构习惯,我会等到新项目 . 在新项目中使用模式的问题是您没有看到它们如何影响或更改工作代码 . 一旦我将代码重构为其中一个代码,我才会理解软件模式,从来没有在我的代码中引入一个新代码 .

3 years ago

实践练习 . 我认为4到5本书甚至是一个过度的阅读练习,没有一些练习 . 我相信,最好的方法是使用模式启动 refactoring your current projects . 或者如果你没有't have any projects you'正在积极地工作,那么 just do it your own way and then try refactoring to patterns .

如果你没有遇到他们解决的问题,你就无法完全欣赏他们 . 请记住,它们不是银子弹 - 你不需要记住它们并且很难动态应用它们 . 我的两分钱..

3 years ago

实践,实践,实践 .

你可以阅读有关多年来演奏大提琴的内容,但仍然无法用弓来演奏和制作听起来像音乐的东西 .

设计模式最好被认为是一个高级别的问题;只有在您具备将其识别为有用所必需的经验时才有意义的 . 你认识到它们是有用的很好,但除非你已经看到它们适用或应用的情况,否则几乎不可能理解它们的真正 Value .

它们变得有用的地方在于您在其他人的代码中识别设计模式,或者在设计阶段识别出与模式非常吻合的问题;然后检查正式模式,检查问题,确定它们之间的差异,以及关于模式和问题的说法 .

它与编码真的一样; K&R可能是C语言的“圣经”,但是多次阅读它的封面并不能提供一种实践经验;没有经验的替代品 .

3 years ago

问自己这些问题:

他们在做什么?

它们分离/耦合的是什么?

你应该什么时候使用它们?

什么时候不应该使用它们?

什么缺少语言功能会让他们消失?

使用它会产生什么技术债务?

有没有更简单的方法来完成工作?

3 years ago

我的建议是实现其中一些并组合它们的一些实现的组合 . 例如,在.Net中,如果您查看数据适配器,可以使用适配器模式,如果有人对框架进行了一些挖掘,则会使用其他一些适配器模式 .

3 years ago

3 years ago

对于初学者,Head First Design模式可以做到,一旦我们熟悉所有模式,然后尝试将实时对象可视化为这些模式 .

本书将帮助您理解基本概念,除非您在现实世界中实施,否则您不能成为设计模式的主人

3 years ago

我发现,在理解他们解决的问题以及其他(更糟)的问题实施方式之前,理解或理解某些模式的好处有点困难 .

除了GOF和POSA书籍之外我还没读过任何书籍,所以我不能给你其他建议 . 真的,你只需要了解问题领域,我认为许多经验不足的开发人员可能无法理解模式的好处 . 这对他们来说并不轻微 . 当人们不得不首先与糟糕的替代方案作斗争时,拥抱,理解和欣赏良好的解决方案要容易得多 .

祝好运

3 years ago

设计模式只是工具 - 有点像库函数 . 如果您知道它们在那里以及它们的近似功能,您可以在需要时将它们从书中挖出来 .

设计模式没有什么神奇之处,任何优秀的程序员在出版任何书籍之前都会将其中的90%用于自己 . 在大多数情况下,我认为书籍在简单地定义各种模式的名称时最有用,因此我们可以更容易地讨论它们 .

3 years ago

我学习设计模式的方法是编写许多非常糟糕的软件 . 当我大约12岁时,我不知道什么是好的或坏的 . 我只是写了一堆意大利面条代码 . 在接下来的10几年左右,我从错误中吸取了教训 . 我发现什么有效,什么没有 . 我独立地发明了大多数常见的设计模式,所以当我第一次听到什么样的设计模式时,我很高兴能够了解它们,然后非常失望的是它只是我已经直观地知道的事物的名称集合 . (关于在10年内自学C的笑话实际上并不是一个笑话)

故事的道德:写了很多代码 . 正如其他人所说,练习,练习,练习 . 我想在你明白为什么你当前的设计很糟糕并且寻找更好的方法之前,你不会很清楚在哪里应用各种设计模式 . 设计模式书应该为您提供精确的解决方案和通用术语,以便与其他开发人员讨论,而不是针对您不理解的问题的粘贴解决方案 .

3 years ago

您是否阅读过Allan Shalloway撰写的“设计模式解释” .

本书与其他设计模式书非常不同,因为它不是一个模式目录,而是主要提供一种分解容易映射到模式的问题空间的方法 .

问题可以分解为两部分:常见的事物和不同的事物 . 完成此操作后,我们将常见事物映射到接口,以及与实现不同的内容 . 从本质上讲,许多模式属于这种“模式” .

例如,在战略模式中,常见事物表示为策略的上下文,可变部分表示为具体策略 .

我发现这本书非常引人注目,与其他模式书相反,对我来说,与阅读电话簿有着同样程度的兴奋 .

3 years ago

最好的方法是开始用它们编码 . 设计模式是一个伟大的概念,仅仅通过阅读它们很难应用 . 采取一些在线发现并围绕它们构建的示例实现 .

Data & Object Factory页面是一个很好的资源 . 他们浏览模式,并为您提供概念和现实世界的例子 . 他们的参考资料也很棒 .

3 years ago

我带领了一些设计模式讨论小组(our site)并阅读了5或6本模式书 . 我建议从Head First Design Patterns一书开始,参加或开始讨论组 . Head First的书最初可能看起来有点像Hasboro,但大多数人在读了一两章之后都喜欢它 .

使用优秀资源 - Joshua Kereivisky's A Learning Guide to Design Patterns进行模式排序并帮助您的讨论组 . 根据经验,我建议的一个改变是将战略放在首位 . 今天的大多数开发人员都经历过工厂的一些好的或坏的化身,所以从工厂开始会导致很多关于模式的对话和混淆 . 这往往会把注意力集中在如何学习和学习模式上,这对于第一次 Session .

3 years ago

我不知道最好的书,但纯粹主义者可能会说Design Patterns: Elements of Reusable Object-Oriented Software

就我个人的喜爱而言,我喜欢用O360553发表的Head First Design Patterns用对话的声音写出来吸引我 . 当我阅读它时,我同时查看了我的源代码,看它是否适用于我正在阅读的内容 . 如果确实如此,我重构了 . 这就是我学习责任链的方式 .

实践 - 实践 - 实践 .

3 years ago

已经给出了很多很好的例子 . 我想补充一个:

误用他们 . 您不需要故意这样做,当您尝试在初始的Design-Pattern-fit中应用它们时会发生这种情况 . 在此期间,您将看到的每个问题似乎都恰好符合一种设计模式 . 由于某些原因,这些问题似乎都符合相同的设计模式(Singelton是其主要候选者) .

而你将应用这种模式,它会很好 . 几个月之后,您将需要更改代码中的某些内容,并看到使用该特定模式并不那么聪明,因为您将自己编码到一个角落,并且需要再次重构 .

当然,这并不是一个21天的答案,但根据我的经验,它最有可能让你对这件事情有所了解 .