【问题标题】:More design patterns?更多设计模式?
【发布时间】:2012-05-09 05:59:31
【问题描述】:

我学习了 GoF 设计模式一书,并列出了 Martin Fowler 的 PoEAA 书籍。 (我也有 Judith Bishop 的书,我个人不喜欢。)但是还有更多的模式,比如委托模式。它的起源是什么?这些书中没有提到其他模式吗?是否有其他关于此主题的“必读”书籍或在线资源?

【问题讨论】:

  • 现在“设计模式”是他们所谓的复制粘贴编程吗?
  • 我相信复制粘贴编程是反模式。

标签: design-patterns


【解决方案1】:

它的起源是什么?

设计模式的起源

不久前我做了一些研究,并对设计模式的起源做了一些笔记。以下是我当时收集的个人笔记的复制/粘贴。

初始影响
对软件工程中设计模式的影响来自一位名叫Christopher Alexander 的人,他是一名建筑建筑师(Houses not Software)。他以其关于设计的理论而闻名,并于 1977 年出版了一本书,A Pattern Language。在这本书中,Christopher Alexander 讨论了模式的概念,因为它们可以被重用并应用于复杂和重复的工程任务。

转向软件开发
Christopher Alexander 的工作影响了 Kent BeckWard Cunningham,他们将模式分类的概念应用于软件开发,并在 1987 年的 OOPSLA 会议上介绍了 their work

四人组
设计模式和软件开发最著名的来源可能是这本书:Design Patterns: Elements of Reusable Object-Oriented Software。这本书的作者以四人组而闻名,他们是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。

这本书是第一本即将出版的设计模式书籍,并在 1994 年的 OOPSLA 会议上首次公开。

这些书中没有提到其他模式吗?

我还没有阅读你提到的所有书籍,但是当我阅读 PluralSight course on design patterns 时,它们已经涵盖了很多内容,请参阅下面的列表。

  • 适配器模式
  • 桥接模式
  • 建造者模式
  • 责任链
  • 命令模式
  • 复合模式
  • 装饰器设计模式
  • 事件聚合器
  • 立面图案
  • 工厂模式
  • 蝇量级
  • 解释器模式
  • 迭代器模式
  • 延迟加载模式
  • 中介者模式
  • 纪念品
  • 模型视图演示器 (MVP) 模式
  • 模型视图视图模型 (MVVM) 模式
  • 空对象模式
  • 观察者模式
  • 原型模式
  • 代理模式
  • 存储库
  • 单例
  • 服务定位器模式
  • 状态模式
  • 策略模式
  • 模板方法
  • 工作单元
  • 访客模式

【讨论】:

    【解决方案2】:

    这些书中没有提到其他模式吗?

    当然。 GoF 模式是这一切的祖父,而且相当普遍,但您也可以拥有特定领域的模式。正如您提到的,就像 Fowler 的 PoEAA。或design patterns for embedded systems。但也比这更具体,比如福勒关于分析模式的书,其中有金融和医疗保健相关的模式。或航空电子系统的模式,如Hillside Patterns Catalog 的链接。

    它的起源是什么?

    如果您的意思是委托模式的起源是什么,我不知道,但有人问过类似的问题here

    还有其他关于此主题的“必读”书籍或在线资源吗?

    我相信,命名为“PLoP”的会议(程序设计的模式语言)是第一个展示相当多模式的地方。

    还有一本 PLoP 期刊:Transactions on Pattern Languages of Programming

    我发现Design Patterns Explained 在解释四人帮模式背后的一些原始想法方面非常有用。这是一个解释而不是参考。

    除了其他地方提到的 PluralSight 目录之外,NetObjectives 还拥有一些关于模式(和一般原则)的大量资源,尤其是他们的 webinars 系列。

    【讨论】:

    • 我不能 100% 确定所有单独的模式,但大多数(如果不是全部)的基础并非源自 GoF。克里斯托弗亚历山大的书(在我的帖子以及您链接的线程上的帖子中提到)很可能是构思这些模式的人,或者至少是它们的原始变体。大多数模式很可能并非源自软件,而是源自建筑或类似行业。 Ken Beck 和 Ward Cunningham 关于该主题的论文也早于 GoF。从那时起,新的模式可能会被设计为软件架构所独有的。
    • 哦,请不要误会我的意思,无论如何,你的回答对我来说是完美的 +1 :),我只是想强调一下,其他人之前已经记录了这个概念,并建议它给 GoF 之前的软件架构.然而,是的,GoF 是第一个在书中制定模式的人,是的,可能为软件架构提出了很多变体。正如你所说,它是爷爷:)
    • @FrançoisWahl 没错。 Alexander 的书绝对是软件设计模式思想的主要灵感来源。我认为他们在 GoF 书中说了这么多,无论如何肯定是在 Design Patterns Explained 书中。我总是假设灵感是模式的idea,并且有一种模式语言,不一定是模式本身。那会很有趣。就像你说的那样,没有人真正发明一种模式,他们只是碰巧是第一个正式记录很多人已经在做什么的人。
    【解决方案3】:

    Design Patterns: Elements of Reusable Object-Oriented SoftwareThe Design of Everyday Things 是非常好的书。我特别推荐前者,因为它读起来很直观。

    【讨论】:

    • 顺便说一下,感谢有关在 Stack Overflow 上做作业的“副作用”链接。非常值得一读。 :)
    • :) OP 删除了该帖子。这是其他人阅读的链接:stackoverflow.com/questions/4161475/…
    【解决方案4】:

    我认为“必读”是非常主观的,但我真的从Head First Design Patterns 学到了很多关于设计模式的话题。也就是说,“Head First”书有一种典型的写作风格(我想我听说有人把它描述为愚蠢的......)可能并不适合每个人,但对我来说它很有效。我特别发现它比前面提到的(尽管确实非常好)“四人帮”书更轻巧,更容易阅读。

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2019-07-20
      • 2013-06-20
      相关资源
      最近更新 更多