ObserverPattern - Web实现示例(Twitter)

时间:2015-07-25 19:53:27

标签: design-patterns twitter

观察者模式
定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖项。

我理解这个定义,我从windows窗体的角度理解它。例如,我们有三种形式,当主体的状态发生变化时,我们可以同时更新三种形式(不同的观察者)。

但是如果我们想在网站上实现观察者模式(例如,在Twitter上),它是如何工作的?

让我们说我们有一个主题比尔盖茨,20个粉丝加入他(20个新的观察员)。

每次新粉丝加入时,是否存储在数据库中谁是谁?因此,如果比尔盖茨发布推文,操作检查数据库谁是他的追随者,并用比尔盖茨的推文更新追随者的墙壁(再次进入追随者ID下的数据库)。

那么Twitter如何从设计模式的角度使用观察者模式(Subject-Observers)?我们是否仍然使用观察者模式,并且当有新的人跟随时,我们使用方法registerObserver将观察者插入Bill的观察者数据库中?当比尔发布一些新内容时,它会从数据库的所有Bill观察员处循环并通知他们?

我试图在Twitter示例中的现实代码使用中理解这种模式。

我查看了有关观察者模式的视频:https://www.youtube.com/watch?v=YIX9Bkl3ZPE

我明白我们何时直接在WinForms中实现(我在讨论用法)。但是当数据库进来时会发生什么?例如对于网络。它是否相同,何时最好使用它,我需要一个网络示例。

1 个答案:

答案 0 :(得分:1)

设计模式是更一般的概念,通常它们只描述实现事物的方式,而不是实现本身。

关于 GoF 模式的另一件事(Observer就是其中之一)是它们在对象层面上工作。这意味着 Subject 会在其属性中保留有关 Observers 的所有信息。如果我们在这张图片中添加数据库,它将不再是真正的观察者模式。

如果我们考虑Twitter,我不认为他们使用Observer,至少不是纯粹的。它应该是更复杂,异步的东西,可以在数据库级别实现。我的猜测是关注者保留订阅列表,每次用户要求更新时,系统只会检查所有订阅的新帖子。