Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如果我有有限的时间学习一些设计模式,我应该学习哪些?_Design Patterns_Oop - Fatal编程技术网

Design patterns 如果我有有限的时间学习一些设计模式,我应该学习哪些?

Design patterns 如果我有有限的时间学习一些设计模式,我应该学习哪些?,design-patterns,oop,Design Patterns,Oop,如果我的时间有限,但我想开始学习一些设计模式,那么我应该先学习哪些模式?在很多地方都被大量使用。该模式也非常常用。这两个是最常用的,并且相对简单;理解它们有助于理解模式,也有助于您的开发。我认为设计模式的有用性更多地在于伴随它们而来的附加词汇,而不是使用单个(或几个)模式。在尝试与其他开发人员交流时,掌握四人帮手册中常见模式的实用知识非常有用 我建议先阅读目录,然后再阅读模式目录的摘要。如果你的时间有限,一般来说,了解图案象征着什么将是有益的,这样当你需要知道图案的细节时,你就会知道去哪里看。这

如果我的时间有限,但我想开始学习一些设计模式,那么我应该先学习哪些模式?

在很多地方都被大量使用。该模式也非常常用。这两个是最常用的,并且相对简单;理解它们有助于理解模式,也有助于您的开发。

我认为设计模式的有用性更多地在于伴随它们而来的附加词汇,而不是使用单个(或几个)模式。在尝试与其他开发人员交流时,掌握四人帮手册中常见模式的实用知识非常有用


我建议先阅读目录,然后再阅读模式目录的摘要。如果你的时间有限,一般来说,了解图案象征着什么将是有益的,这样当你需要知道图案的细节时,你就会知道去哪里看。这与了解自己小岛上的状态或单态模式相反。

为什么不阅读它们的摘要,看看它们是否对您有用,是否值得进一步研究。

我建议反转控制/依赖注入。这在单元测试时非常方便,因为它使您能够为被测试的类提供模拟依赖项。在包装密封类以使其在测试场景中更可用时,代理也非常有用


如果我再提一个建议,我会把重点放在学习在不同情况下哪些模式是有用的,而不是集中在学习如何实现特定的模式上。在实现模式时,您几乎总能找到要使用的参考实现,但是能够辨别何时以及使用哪种模式将使模式更加有用。如果你开始用另一种方式来解决问题,你最终会使你的问题符合你知道的模式,而不是应用适合问题的正确模式。

抽象工厂。用于依赖项注入(DI)。

如果你了解这一点,你就知道DI基本上是如何工作的,然后你就知道什么是控制反转。

设计模式不是你很快开始阅读和学习的主题。 你必须做很多练习,然后将所学知识应用到实际场景中。 如果你的时间真的那么有限,那么你可能是在浪费时间。 我推荐这本书,它很好

但是,您对OO的了解应该从一开始就达到相当高的标准。

命令模式比抽象工厂稍微复杂一些,但它是常用的,而且功能强大


另一个我从未真正有机会使用的模式是“复合”模式。这篇文章将让你很好地了解面向对象技术,如果你遇到需要它的时候,它可能会很有用。

你的问题就像在问:“我想学习C#,但只有时间学习几个关键词。我应该学习哪些?”


任何一种设计模式都不是生活在真空中。它们都定义了应用程序如何协同工作的不同方面。不太可能有任何一个应用程序需要所有已知的设计模式,但每个应用程序都是不同的,每个应用程序都需要不同的设计模式组合。知道什么不用和知道用什么一样重要。您至少需要掌握所有主要设计模式的对话知识

从前面提到的这本书开始。了解一下所有这些。不要因为没有时间而肚子痛--要把握时间!在FaceBook之外多呆几个晚上,或者跳过一两次《星际迷航》的重播


此外,除非你真的是OO大师,否则首先要避免。它是相当密集的,并立即假定您了解模式的价值和需要。这是一本很棒的书,只是不是一本很棒的第一本书。

我认为“Flyweight”是一种非常酷的模式,与其他任何东西都没有任何关系。(也就是说,你永远不会决定在它的位置上使用另一种模式。)


但如果你只想学习一种模式,“访问者”就是你想要的。这是一个远远超出面向对象编程的概念;它将帮助您理解函数式编程概念,如
map
fold
。甚至像
收集
注入

策略等OO方法也在我的候选名单中。这是一个很好的方法,可以消除代码中的条件逻辑,而条件逻辑只支持多种操作方式,它有助于提取“策略”代码,以便可以单独测试。

GoF(四人帮)一书建议从以下方面入手:(在书中的“读者指南”中)

从最简单最简单的开始 常见模式:

  • 抽象工厂
  • 适配器
  • 复合材料
  • 装饰师
  • 工厂法
  • 观察者
  • 策略
  • 模板法

  • 我个人一直觉得你不会“学习”设计模式。。。你要学会“识别”它们。换句话说,当我第一次阅读设计模式时,它们中的很多看起来像是在我之前创建的应用程序中自然出现的解决方案,但也许我没有完全一样或干净地完成它


    在我看来,设计模式更多的是将一次又一次具体化的解决方案标准化,而不是教你如何解决一个特定的问题。

    扔掉你的拐杖

    Singleton基本上是不推荐的,主要是因为没有Singleton就无法测试任何Singleton。例如:除了dang DB.conn()方法之外,您可以在没有数据库的情况下使用存根测试DAO。但是,是的,您将在现有代码中看到很多,而且它仍然太常用。ConnectionFactory.getInstance()可以返回每个