什么时候使用哪种设计模式?[关闭]


104

我非常喜欢设计模式,但是很难找到何时可以应用的模式。我读过很多网站,其中解释了设计模式。我确实了解其中的大多数,但是我发现很难根据自己的情况识别模式。

所以,这就是为什么我问这个问题。在使用哪种设计模式时是否有任何准则/警报铃。

例如,如果要执行switch语句来确定需要创建的对象,则可能要使用工厂设计模式。因此,在这种情况下,switch语句是使用Factory模式的“警钟”。

那么,您知道更多确定设计模式的“警钟”吗?


6
通常,我看到的模式描述包括对您希望使用该设计模式的情况的描述。
R. Martinho Fernandes

Answers:


99

通常情况是相反的。不要去寻找使用设计模式的地方,而去寻找可以优化的代码。当您认为代码结构不正确时。尝试找到可以解决问题的设计模式。

设计模式旨在帮助您解决结构性问题,不要仅仅为了能够使用设计模式而设计应用程序。


23
不仅是结构性问题,而且还有行为和创造问题。
DevDemon

1
设计模式可以通过提供经过测试的,经过验证的开发范例来加快开发过程。有效的软件设计需要考虑直到实施的后期才变得可见的问题。重用设计模式有助于防止可能导致重大问题的细微问题,并提高熟悉模式的编码人员和架构师的代码可读性。
SaddamBinSyed

5

学习它们,慢慢地,您将能够进行核对并弄清楚何时使用它们。从简单的单例模式开始:)

如果要创建一个对象的实例,而仅创建一个。您使用单例模式。假设您正在编写一个带有options对象的程序。您不想要其中的几个,那太愚蠢了。Singleton确保永远不会超过一个。单例模式很简单,使用很多,而且非常有效。


17
当您只需要一个实例时,单例并不适用。Singleton适用于需要限制一个实例的情况。如果只需要一个实例,则可以尝试仅创建一个实例并使用它。
R. Martinho Fernandes

同样,尽管单例在某些地方非常有用且必不可少,但在不必要时也很容易实现。正如您在这里暗示的那样,正如Fernandes所指出的那样,您可能不需要它。事实上,单例模式用法是可能(可能)代码气味的好兆头。将其用于服务类很有可能会产生代码异味。听起来您需要DI,而不是单例。有些人确实那样使用它们。特别是对于小的(不重要的)代码或POC。但是就像我说的,有一些有效的用法。不要找到一种简单的方法来做某事,而只是去做。
Suamere 2014年

4

我完全同意@Peter Rasmussen。

设计模式为常见的设计问题提供了通用的解决方案。

我希望您遵循以下方法。

  1. 了解每种模式的意图
  2. 了解每种模式的清单或用例
  3. 考虑解决您的问题并检查您的解决方案是否属于特定模式的清单
  4. 如果没有,只需忽略设计模式并编写自己的解决方案。

有用的链接:

来源制作:用多种语言(包括C ++和Java)精美地解释意图结构清单

维基百科:以多种语言(包括C#和Java)解释结构,UML图和工作示例。

每个 sourcemakding设计模式中的清单经验法则提供您正在寻找的提示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.