首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何应用设计模式?

如何应用设计模式?
EN

Stack Overflow用户
提问于 2010-09-13 07:45:33
回答 9查看 9.8K关注 0票数 27

从书呆子的角度来看,您可能会说x设计模式适用于y场景,但我想在这里再深入一点。下面是我的问题:

  1. 您什么时候决定使用设计模式?在编码之前,你们是否都决定了设计模式?
  2. 在完成编码(小重构)之后,您是否应用了任何DPs?在维护代码的同时应用DP吗?
  3. 在设计过程中主要应用的设计模式是什么?
  4. 您在调整/重构代码时应用的DPs是什么?
  5. 在代码(技术而非功能方面的东西)中是否有提示建议您应该应用DP (比如太多的ifs、双分派、多线程)?如果是的话,你能说出DPs及其集水区的名称吗?
  6. 您是否使用了任何让您对您编写的代码感觉良好的Micro(尽管其他人为此讨厌您:p)?

编辑:

我想补充的是,我读了DPs的“头第一设计模式”,虽然它是最好的书籍之一,以了解模式。我不认为我能够把必胜客的例子转换成现实世界的场景。

我认为这是关于DP的最有影响力的书籍之一,但是我们仍然可以有一本书,它可以列举各种流行的业务场景,这些场景需要一个特定的模式和模式。我认为,这些知识在很大程度上仍是隐含的。这样的一本书会是一个很好的快速参考,你不觉得吗?)

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-09-13 10:51:05

  1. 这取决于您如何编写代码。如果这是我在编写代码之前决定的一个大项目,那么在我开始编写代码之后,如果我注意到应该使用设计模式的地方,我就重构代码。
  2. 是的,如前所述。
  3. 在99.99%的情况下:工厂模式辛格尔顿 (与其他人一样,我在许多地方使用它是因为实现起来很简单,而在实践中,我倾向于在重构代码时删除它)。然后:对象池(如果我有要重用的资源-我的一些项目是游戏,我需要对资源进行良好的管理)、策略和模板方法(因为它们对解耦非常有用,并且很好地服务于使代码易于扩展的目的)。然后,当您有一个想要使用的库时,可以使用Adapter,而不依赖它(解耦)。
  4. 和上面一样,如果我还没用的话。它也以相反的方式工作。如果我找不到使用设计模式的理由,我会在编写代码时删除或跳过它(这种情况总是发生在单例中,有时发生在工厂中)。有时,我使用一个工厂,它也是一个单例,提供给我那些应该是单身汉对象的东西;不知道这样做是否明智,但它对我有用)。
  5. 我认为唯一的代码提示是对类的引用数。您还可以使用PMDjDepend体系结构规则来查找类包含太多依赖项的位置。我不确定这是个编码提示。在设计阶段,而不仅仅是当您决定使用设计模式时,只需考虑其好处。我发现,软件设计原则对于帮助您理解何时以及为什么(不)使用设计模式非常重要,但对于许多使用设计模式的程序员来说,它们是未知的。
  6. 我不知道你说的Micro是什么意思。我尝试使用DPs时,只有当我找到使用它们的理由,当它的好处似乎比问题更大时。我避免过度使用,因为它导致您放松时间,实现和维护工厂模式,而不是真正的软件。
票数 12
EN

Stack Overflow用户

发布于 2010-09-13 08:44:23

关于如何和何时(不)使用设计模式的两本好书是:

  • 模式孵化器 (GoF的约翰·维利斯塞斯)
  • 模式重构 (乔希·克里夫斯基著)
票数 9
EN

Stack Overflow用户

发布于 2010-09-13 07:55:56

我认为有一种倾向,至少对于那些刚开始学习设计模式的人来说,他们会过度应用一种模式;当你有锤子的时候,一切都开始看起来像钉子了。更好的方法是考虑API的替代方案及其各自的优势和权衡,然后选择合适的方法。设计模式更多地是一种术语帮助,它允许开发人员有效地传递他们正在做的事情,而不是提供如何编写代码的指导方针。也就是说,代码中会出现一些事情,告诉同事您使用了工厂比解释您传递的对象创建其他对象要容易得多.但是,仅仅因为工厂的概念存在并不意味着你应该尝试把你看到的一切都变成工厂。讲得通?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3698594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档