使用软件设计模式有哪些实际经验?

时间:2009-04-23 06:07:37

标签: design-patterns architecture

Wikipedia对各种设计模式有很好的summary。 您在实践中最多使用了哪些,您的经历是什么? 什么时候应该去找一个模式而不是什么时候呢?

编辑:一个很酷的基于C#link的实用DP示例(tnx到Mladen Mihajlovic)

11 个答案:

答案 0 :(得分:17)

你绝对应该避免“模式驱动设计”,你试图尽可能多地将模式塞入你的类中。我发现了解最重要的设计模式很有用,当我遇到一个新的设计问题时,我会问自己一个问题“我知道一个在这里有用的模式吗?”。如果我这样做,我会尝试使用它;如果没有,那么我不会(我有时也会查找它们,因为我不清楚每一种模式)。

设计模式可以真正帮助您改进代码,但错误地使用它们也可能真的搞砸了。

答案 1 :(得分:6)

重新那些可能没有所有模式经验的人将能够理解您的代码正在做什么

我认为这是相反的方式。模式是一种沟通设计的好方法,所以如果人们不了解因素,观察者,装饰者,那么他们就有问题......

alt text
(来源:headfirstlabs.com
查看“Head First: Design Patterns”,他们还有一些forums regarding the book和一个design meditation

良好的模式网站 http://www.dofactory.com/Patterns/PatternObserver.aspx

答案 2 :(得分:4)

我的经验是,大多数谈论DP的程序员都不了解它周围的一些力量等等! 引用Yegge的伟大Singleton Considered Stupid

  

如果他们在Design Patterns中声称具有专业知识,并且他们只能命名Singleton模式,那么他们只能在其他公司工作。

答案 3 :(得分:4)

我认为最好遵循的规则是KISS。模式可以帮助您的软件更易于维护和理解,但最终KISS可以确保那些可能没有所有模式经验的人能够理解您的代码正在做什么。

答案 4 :(得分:3)

创建模式是直截了当的,我们可以轻松地总结何时使用特定模式。我根据需要在项目中使用了所有5种模式。

当您对某个功能有不同的实现时,应该使用

策略模式,这可以非常轻松地在运行时更改 - 比如更改配置以修改现有行为并转移到不同的实现

装饰器模式也很简单 - 您可以在运行时添加行为而无需触及现有类并添加新类

责任链,状态,适配器模式在实时中也非常有用。

Bridge,Proxy& Facade - 我在项目中看到的场景非常少。

其余模式中包含: Memento,访问者,调解员 - 到目前为止我没有找到任何用例,与其他模式相比,我不喜欢它们

答案 5 :(得分:2)

我在大多数项目中使用的一种模式是MVC。事实证明,它对我的​​编程类型来说是完美的。考虑到我实际执行的编程量,我还使用了大多数可用模式的组合。不要忘记,模式是我们在编程中遇到的“常见问题”的解决方案。

Here's a cool link用于阅读有关实现的模式(在C#和VB.NET中)。

答案 6 :(得分:2)

正如Benedikt已经写过的,根据经验,只使用模式来解决问题,不要改变你的问题以使其适合模式。 ; - )

我经常使用工厂和建筑商。行为方面的命令,观察者和访客模式。

它们自然适合我在日常发展生活中遇到的大多数问题。

答案 7 :(得分:1)

工厂和装饰器在Java和.Net框架中都经常使用。

答案 8 :(得分:1)

我们尝试确定可以应用众所周知的模式的位置。 通常我们不会为它们编写代码,我们只是接受它 来自不同的地方。我们使用现有代码 单身,代理,州等

看一下Gamma的书“设计模式”

“Java Camp Code”也有常见模式的代码 (http://www.javacamp.org/designPattern/

维基百科也有模式代码

路易斯

答案 9 :(得分:1)

回答标题:“有什么实际经验......?”,我会说尝试DP已经教会了我如何真正工作,特别是界面的力量。

回答其他帖子:

我最喜欢的模式是:

  • MVP(测试的被动视图)
  • 策略 - 与TDD结合使用,
  • 模板方法 - 用于将常见行为提取到超类中。

在使用了各种模式之后,我注意到我发现它们越来越多地“自发地”出现,作为一些问题的答案。

我同意其他人的意见,你不应该为了使用模式而使用模式 - 你会陷入困境,试图塑造问题以适应解决方案,这通常是有问题的。

答案 10 :(得分:1)

根据我的经验,一些设计模式比其他设计模式更适合于某些类型的编程,例如,在游戏编程中,状态机模式是我使用的很多。 MVC和模板设计模式也非常有用。