5

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

但我也读到它的第一个实现是在基于 SmallTalk MVC 的框架中。

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

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

4

2 回答 2

8

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

// this is an observer

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

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

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

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

于 2013-05-17T03:30:24.233 回答
1

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

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

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

于 2013-05-17T03:25:35.460 回答