设计模式及其用途的最佳资源是什么?

时间:2008-09-18 12:50:01

标签: design-patterns resources

当涉及到设计模式的使用时,我猜测有三种类型的商店。那些不知道模式的人如果碰到它们 - 这些通常更喜欢使用Ctrl-C / Ctrl-V方法进行代码重用。那些每天花费数小时搜索他们遗留代码的人希望实现一个更好的模式 - 这些通常花费更多的时间来重构简单程序的代码,而不是花费在百年维护中。最后,那些在有意义的情况下使用模式走中间路径的人,以及为最低限度暴露的代码编写任何首先编码的东西。

我想知道是否有人在软件开发生命周期中锁定了一种平衡的模式使用方法。此外,网络上最好的资源,模式,激励因素和正确使用的资源是什么?

感谢。

13 个答案:

答案 0 :(得分:6)

那里有许多不同的'模式'家庭,但你的问题最广泛的话......

我建议:

离线(我的最爱):

离线(热门):

  • GoF设计模式
  • Fowler的重构:改进现有代码的设计

答案 1 :(得分:4)

答案 2 :(得分:2)

良好的模式使用取决于知识和经验;它没有公式。一个好的事情是让有经验的人明智地应用模式来定期检查团队中其他人的代码,以确保他们不会过度使用或使用设计模式。它们不是预先制作的食谱 - 它们需要技巧才能有效地应用并且必须学习。

我对设计模式的第一次也是最好的接触是Portland Pattern Repository

答案 3 :(得分:2)

“模式”的使用在很大程度上取决于

  1. 使用的语言
  2. 目标就像要达成一致。
  3. 设计模式可以用C ++,Java等语言进行过度命名。他们隐藏了各种打字问题引入的不灵活性。这是一个关于在限制较少的语言中“生存”的模式的链接: http://norvig.com/design-patterns/

    另一个例子是面向方面的程序设计,其中可能的努力是用不是“设计”的语言“引入”的东西。

    使用过的工具背后的哲学也有很大的影响。比较一下,让我们说一下Smalltalk,Common Lisp,Haskell等中的普通PHP或Visual Basic程序和解决方案。

    语法元素也有很大的影响。在C,C ++(迭代器)中你会看到大量类似的循环,但是如果你研究支持更高阶函数的语言,你会发现一些循环。

    然后你必须看看人们使用哪种方式进行编程,自下而上或自上而下,零碎增长或构建金字塔,或任何其他个人偏好

    我建议阅读上面提到的链接,然后检查“不同”语言的实现....

    此致 弗里德里希

答案 4 :(得分:1)

我想我必须推荐重构:改进现有代码的设计

Refactoring: Improving the Design of Existing Code
(来源:2020ok.com

大量关于如何合理使用模式的例子。

答案 5 :(得分:1)

我认为最好的网络资源包含有关模式和重构的信息 - http://sourcemaking.com

答案 6 :(得分:1)

每个人都在使用模式。他们可能不知道。即使像'迭代列表'这样的简单事情也是一种模式。

我认为将模式合并到工作周期中的最佳方法就是使用它们,并在讨论它们和评论代码时通过名称引用它们。希望这会导致知识的传播。

所以,举个例子来说,你已经发现你所做的事非常适合Observer。你对你的同事说“嘿,如果我们把这个对象变成一个观察者,这个对象就是它的主题,这真的很容易。”

你的同事要么马上理解 - 这种模式可以节省你的时间 - 或者你可以教育他们,并且接下来时间你提到他们会马上理解的观察者。

与此同时,你传播知识,他们会发现使用他们从你那里学到的新模式的机会。这当然是双向的。下次可能他们教导一个新模式。

所有这一切都依赖于你的同事不是那种点头的人,并且当他们不这样做时就会假装理解某事。你确实需要他们说“嘿,你提到观察者,我不认为我知道那是什么。”

答案 7 :(得分:1)

我是这个系列的忠实粉丝并阅读了很多书,所以我建议Head First Design Patterns。你可以通过O'Reilly的Safari Bookshelf在线阅读,但硬拷贝也带有很棒的模式海报。

答案 8 :(得分:1)

我完全赞同上述评论。我使用设计模式,但我总是依赖团队的其他成员来真正了解特定模式的好处。否则你最终会得到丑陋的代码和一个类似于模式的轻量级包装器。

另外http://www.developer.com每月有一些与设计模式及其应用有关的文章。祝好运!

答案 9 :(得分:0)

定义和原始答案是Design patterns中概念的起源。本书以非常理论的方式处理这个概念,而不是渗透到该领域的管理层。他们认为设计模式只是普通习语的名称;他们列举了一些并为其立场辩护。

他们避免使用“我应该使用什么样的设计模式”类型的问题,而是将问题处理为“我是否自然而然地进入一个众所周知的领域?如果是这样,其他人可以帮助我吗?”。对我而言,设计模式不像是粘合在一起制作解决方案的预制组件。它们只是当您遇到类似于其他人反击的情况时的指导存储库,并给出了允许人们参考对话中的一般情况的名称。

答案 10 :(得分:0)

设计模式很有趣,因为当您完全理解适用的模式时,您只知道在何处使用模式。像战略,观察者,迭代器这样的东西,你可以,稍微练习,使用而不用太费劲。如果您使用的是C#,则始终使用Iterator(IEnumerable ...)而不将其视为模式。

在我看来,这些简单的模式是最好的模式。你已经有了一份工作要做,并试图将你的问题分成一个又一个模式,当它完全适合时,会浪费你的时间,并导致代码错误。

我的建议是查看模式的uml图,如果它非常简单,那么请尝试学习它,以便以后再调用它。具有更简单合同的模式可能更常用。

答案 11 :(得分:0)

我会选择Gang of Four Design Patterns预订

答案 12 :(得分:0)

我同意这些参考资料,但没有新手友好。要以简单的方式快速开始学习设计模式:

Head First : design pattern

然后,一旦你了解了大局,就可以查看更高级的书籍(很多实际例子; - ))