设计模式

5

可能是重复问题:
如何知道何时使用设计模式?

我该如何理解/决定“何时使用哪种设计模式”?

在选择在适当的地方使用适当的设计模式时,需要观察哪些因素?


3
你读过这本书吗?读这本书。 - John Saunders
5
我认为这可能是 https://dev59.com/FHVD5IYBdhLWcg3wHnsX 的重复。 - Steve Dignan
谢谢Steve!链接真的很有帮助。 - JMSA
也许你还需要了解设计反模式,可以参考 http://deviq.com/antipatterns/。 - NoWar
6个回答

3

一般来说,如果你做得正确,它就会有一个模式,只是你可能不知道在使用它。

如果你做得不对,那么它就有一个反面模式。但你绝对不知道你在使用它。


有趣(即反讽),但无益。 - ChrisW

2

3
GoF 网站的讨论非常抽象,我发现很难理解。 - JMSA
任何有关设计模式的讨论都将是抽象的。这是一个非常高层次的概念,适用于大多数编程语言。Steve提供的链接很好的地方在于,对于每个模式,您都会得到一个带有真实代码的实际示例。您应该能够从这些示例中找出实际应用。 - Justin Niessner

2
你不应该总是试图让你的软件适应一个设计模式,但如果它符合你使用的模式,那么就可以使用它。在许多情况下,你所做的大部分工作都有一个设计模式,这只是从许多不同的软件实现中观察到的普遍存在的模式。

例如,如果你有一组需要同步的类。那么使用观察者或发布/订阅模式是很好的选择,其中一个类是通知者,另一个类监听通知。 观察者模式

或者说你想要限制游戏引擎中的内存使用,那么你可以创建一个对象池。 对象池

或者说你想简化一组对象到一个简单API中,那么就使用门面模式: 门面模式

许多时候,仅使用封装或继承等功能模式就足够了。这取决于问题本身。在大多数情况下,你尝试编码的大部分问题都可以通过模式来解决,但模式并不是唯一的编码方式。在许多情况下,你开始设计或有一个需求,然后它变成了一个模式。

请记住,模式起源于观察到许多类型的软件问题,它不是起点,而是反映了软件架构。

计算机科学中的设计模式

在dofactory.com上展示了许多模式示例:dofactory 的设计模式教程

Python 设计模式:http://video.google.com/videoplay?docid=-3035093035748181693

强制使用设计模式就像强制使用面向对象编程一样。它应该自然而然地从手头的项目需求中产生。

0
所有明确定义的模式都有背景、上下文和该模式解决的问题。
模式的整个意义在于告诉你何时使用它是合适的。

0

0

我发现,如果只是对程序进行一些简单的修改,良好利用设计模式可能几乎是不可能的。但是,如果你设计你的程序,然后再看看你想要做什么,设计模式就会在你的应用程序中出现。

例如,如果你发现有一个类来控制应用程序的流程,那么控制器模式就是有意义的。

使用设计模式的另一种方法是编写程序,让它工作,然后使用设计模式进行重构。我相信马丁·福勒(Martin Fowler)写了一本关于这个主题的书,但我不确定作者是谁。

无论哪种方式,了解你想做什么有助于决定哪些模式最佳。


是的,福勒的《重构:改善已有代码的设计》。这是我遇到过的最好的关于这个主题的书籍。 - CurtainDog
我查了一下,这本书叫做“重构到模式”。 http://www.industriallogic.com/xp/refactoring/ - James Black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接