【问题标题】:What is the story of the Observer Design Pattern?观察者设计模式的故事是什么?
【发布时间】:2013-05-17 01:07:14
【问题描述】:

我一直在调查一项作业的观察者模式。到目前为止,我得出的结论是,它首先出现在一群人写的一本名为“四人帮”的书中。

但我还了解到,它的第一个实现是在基于 SmallTalk MVC 的框架中。

观察者模式有起源吗?谁先设计的?哪个 GoF 成员做到了?自创建以来,它是否发生了任何变化?

此外,该模式的一些实现包括他们所谓的“ConcreteSubject”,它是 Subject 类的泛化。这是模式的变体,还是原始模型的演变?

【问题讨论】:

    标签: design-patterns history observer-pattern


    【解决方案1】:

    四人组对设计模式的主要贡献实际上是为一些常用模式命名,以帮助传达设计意图。写起来容易多了

    // this is an observer
    

    比一大堆没人会读的 cmets。如果人们共享行话,开发人员可以更有效地沟通。

    观察者模式早在面向对象编程之前就已经存在了。大多数情况下,它使用术语“回调”来引用,通常使用各种语言的函数指针来实现,或者甚至可能是一个用于指示应该调用哪个函数/过程/子例程的标志。这代表了模块之间最早的抽象通信形式之一。我什至在汇编语言中看到过类似的方法——存储回调地址并使用它来间接通知“发生了某事”。

    要记住的一件大事... 四人帮在设计模式一书中展示的实现并不是“绝对的”——他们在那里展示了一种方法。您可以使用函数指针轻松实现观察者模式,就像使用抽象类、接口或 C# 委托一样。

    (顺便说一句,我在约翰霍普金斯大学教授设计模式课程;))

    【讨论】:

    • 我得到的最好的解释。非常感谢!只有最后一个问题。我不能很好地理解将 Subject 组件概括为“ConcreteSubject”的原因。那是怎么回事?再次感谢。
    • “主题”是一个抽象,代表任何想听的东西。它通常是一个接口或抽象类,但也可以是非 OO 语言中的函数指针参数定义。 ConcreteSubject 表示实现主题定义的东西;实现/扩展主题的类(或您将传递指针的实际函数)。 (感谢您的客气话!很高兴我能帮上忙)
    【解决方案2】:

    The Gang of Four 所做的并不是发明模式,他们观察并研究了当时的软件领域,以便对开发人员面临的常见问题的解决方案进行分类。

    至于最初是谁发明的,你的猜测和我猜的一样好。虽然如果有人知道是谁发明了它,我会很感兴趣。在我看来,这就像问是谁发明了火……

    ConcreteSubject 指的是Subject 接口的实现。这不是一个变体,它只是需要一个接口来促进模式。 (或超类,但接口要好得多)。

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2011-06-24
      • 2011-11-25
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多