观察者设计模式有点像播客

如果您收听播客,那么您已经熟悉了Observer模式。实际上,您是“观察者”。

这是“观察者”模式的定义:

观察者模式定义了对象之间的一对多依赖关系,因此当一个对象改变状态时,其所有依赖关系都会得到通知并自动更新。

让我们看一下与播客相关的定义。

我发现了一个有趣的播客,名为Developer tea。

单击“订阅”按钮后,我现在位于其订阅者列表中。

当开发者茶发布新剧集时,该应用会通知我和其他订阅者。它将为我们下载新剧集。

这就是观察者模式的定义!

观察者模式定义了对象之间的一对多依赖关系,因此当一个对象改变状态时,其所有依赖关系都会得到通知并自动更新。

开发者茶播客和订阅者之间存在一对多的关系。

当开发者茶更改状态(例如发布新剧集)时,所有开发者茶的订阅者都会收到通知和更新。

让我们在Ruby中实现它。

从一个简单的版本开始。

Podcast类包含一个情节列表,并具有将add_episode添加到该列表的方法。

然后,我们可以创建developer_tea播客,并向其中添加第1集:

每当发布新剧集时,我都希望收到通知。

在列表中添加新剧集之后,我们可以更新我:

每当我从developer_tea获得更新时,就可以继续下载最新的剧集。

我非常喜欢听developer_tea,因此我推荐给我的朋友Amber。现在,Amber也想订阅它。

我们需要确保无论何时发行新剧集,Amber也会收到通知:

嗯,这段代码可以满足我们的要求。

但有一个问题。

每次我们想要添加一个订户时,我们都必须重新定义该类。

有没有一种方法可以更新订户列表而不必重新定义类?

can我们可以保留订户列表!

新的Podcast类借助两种新方法来保留订户列表:一种用于添加订户,另一种用于删除订户。发行情节时,我们将更新每个订户。

不幸的是,Amber不喜欢我的播客,因此决定退订。我们使用remove_subscriber方法将其从订户列表中删除。

是的!您刚刚学会了观察者模式!

观察者模式背后的设计原理。

观察者模式利用松耦合设计原理:

力争在相互作用的对象之间实现松耦合设计。

播客课程对订户的了解不多。它只知道每个订户都有一个更新方法。

这种松散的耦合使Podcast及其订户之间的依赖性最小化。它还最大程度地提高了灵活性。只要具有更新方法,订户就可以是任何人:人类,一群人,动物甚至汽车。

外卖:

  1. 观察者模式定义了对象之间的一对多依赖关系,因此当一个对象改变状态时,其所有依赖关系都会得到通知并自动更新。
  2. 松散耦合设计原则:努力在相互作用的对象之间进行松散耦合设计。

谢谢阅读。您还能想到观察者模式的其他现实示例吗?

我每周出版sihui.io。

订阅,您将不会错过该系列的下一篇文章。

下次我们将谈论...