观察者设计模式的故事是什么?

时间:2013-05-17 01:07:14

标签: design-patterns history observer-pattern

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

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

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

此外,模式的一些实现包括他们称之为“ConcreteSubject”的东西,它是Subject类的概括。这是模式的变体,还是原始模型的演变?

2 个答案:

答案 0 :(得分:8)

Gang of Four对设计模式的主要贡献实际上是为一些常用模式命名,以协助设计意图的沟通。写起来容易得多

// this is an observer

比没有人会阅读的大块评论。如果人们分享行话,开发人员可以更有效地沟通。

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

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

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

答案 1 :(得分:1)

“四人帮”所做的不是发明模式,他们当时观察并研究了软件领域,以便为开发人员面临的常见问题编制解决方案。

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

ConcreteSubject指的是Subject接口的实现。并且它不是一个变体,只需要一个界面来促进模式。 (或超级类,但界面更好)。