什么时候使用哪种设计模式? [关闭]
Posted
技术标签:
【中文标题】什么时候使用哪种设计模式? [关闭]【英文标题】:When to use which design pattern? [closed] 【发布时间】:2011-06-29 17:05:43 【问题描述】:我非常喜欢设计模式,但我发现我很难确定何时可以应用。我已经阅读了很多解释设计模式的网站。我确实了解其中的大部分内容,但我发现在我自己的情况下很难识别出其中的一种模式。
所以,这就是我问这个问题的原因。何时使用哪种设计模式是否有任何指导方针/警钟。
例如,如果您正在执行一个 switch 语句来确定您需要创建哪个对象,您可能希望使用工厂设计模式。所以这种情况下的 switch 语句是使用工厂模式的“警钟”。
那么,您知道更多确定设计模式的“警钟”吗?
【问题讨论】:
通常我看到的模式描述包括对您想要该设计模式的情况的描述。 【参考方案1】:通常过程是相反的。不要去寻找使用设计模式的地方,寻找可以优化的代码。当你有你认为结构不正确的代码时。尝试找到可以解决问题的设计模式。
设计模式旨在帮助您解决结构性问题,不要仅仅为了能够使用设计模式而设计您的应用程序。
【讨论】:
不仅是结构问题,还有行为和创造问题。 设计模式可以通过提供经过测试的、经过验证的开发范例来加速开发过程。有效的软件设计需要考虑在实施后期才可能显现的问题。重用设计模式有助于防止可能导致重大问题的细微问题,并提高熟悉模式的编码人员和架构师的代码可读性。【参考方案2】:学习它们,慢慢地您将能够重新认识并弄清楚何时使用它们。从简单的单例模式开始:)
如果您想创建一个对象的一个实例并且只创建一个。您使用单例模式。假设您正在制作一个带有选项对象的程序。你不想要其中的几个,那将是愚蠢的。 Singleton 确保永远不会超过一个。单例模式很简单,用的很多,而且非常有效。
【讨论】:
单例并不适用于只需要一个实例。单例适用于您需要限制到一个实例。当您只需要一个实例时,您可以尝试只创建一个实例并使用它。 另外,虽然单例在某些地方非常有用和必要,但在不需要时它也是一种非常容易实现的模式。正如你在这里暗示的那样,正如费尔南德斯指出的那样,你可能不需要它。事实上,单例模式的使用是可能(可能)代码异味的好兆头。将它用于服务类很可能是代码异味。听起来你需要 D.I.,而不是单例。有些人确实以这种方式使用它们。特别是对于小的(不重要的)代码或 POC。但就像我说的,有一些有效的用途。不要找到简单的方法来做某事,然后就去做。【参考方案3】:我完全同意@Peter Rasmussen。
设计模式为常见的设计问题提供通用解决方案。
我希望您遵循以下方法。
-
了解每个模式的意图
了解每种模式的清单或用例
为您的问题考虑解决方案并检查您的解决方案是否属于特定模式的清单
如果没有,只需忽略设计模式并编写自己的解决方案。
有用的链接:
sourcemaking :用包括 C++ 和 Java 在内的多种语言精美地解释 intent、structure 和 checklist
wikipedia:解释结构、UML 图和多种语言的工作示例,包括 C# 和 Java。
检查清单和经验法则在每个sourcemakding design-pattern 中提供你的警钟寻找。
【讨论】:
以上是关于什么时候使用哪种设计模式? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
哪种聊天模式更好:在输入时打印消息,还是在服务器接收到消息后打印? [关闭]