使用带推或拉的观察者设计模板

Using an observer design template with push or pull

我正在独立学习软件工程的基础知识。 还有一些我对观察者设计模板不了解的地方。

我有这个图,在这个图中我标记了每个部分说的是什么,无论是观察者,主题,具体观察者还是适配器。

看这张图我没看懂是push还是pull的模型。 在我看来,这是一个拉动,但我不确定。 我认为这是 Pull,因为我们通知我们的 Observers 发生了变化,然后 Observers 去检查变化是什么并询问主题的状态。

如果你能帮助我,我会很高兴。

显然 ColourHandler 是一个主题,ColourSelector 是它的观察者。 Colour本身就是一个简单的数据结构。我不知道为什么它会有 set_colour() 方法。枚举就足够了。 Adapter是一个独立的设计模式,与Observer无关。

未显示 update() 方法的实现;但是,我们可以看到它不需要参数。这是 拉取 模型的强烈指示:ColourSelector 必须查询 ColourHandler 以确定新的 Colour。另一个迹象是 Subject 和 Observer 之间的循环依赖。在 push 模型中,Observer 不需要耦合到 Subject。

另见 push vs pull 的 GoF 描述。