谈谈观察者模式

谈谈观察者模式传说,好莱坞有一条规则:别来找我,我会去找你。观察者模式,有两种角色:观察者,以及通知者。比如,当一个对象被修改时,则会自动通知它的依赖对象。

大家好,欢迎来到IT知识分享网。

传说,好莱坞有一条规则:别来找我,我会去找你。

观察者模式,有两种角色:观察者,以及通知者(或者叫目标对象)。

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

单谈概念总是很虚,让我们来看一个实例:

假设我们有一个商城,有这么样一个需求,当商城上架新的商品时,要将产品推送到各个合作商家,伪代码如下:

谈谈观察者模式

那么,这样就会有一个问题,当每增加一个合作商家,就有修改这段代码,这肯定会后期的维护带来一些问题。

这时候,观察者模式就派上用场了。

这里,商城就是我们的通知者,而各个合作商家就是观察者。

让我们一步步把这段代码使用观察者模式重构。

1.首先定义一个接口,名叫Observer,拥有一个update方法:

谈谈观察者模式

这个接口是对各个商家的抽象,我们不关心具体你是哪个商家,只需知道你是一个observer即可。

2.接下来定义我们的商城,它应该拥有一个成员变量,来存储合作商家。这里,Shop需要对外暴露一个接口,这个接口可以让外部注册观察者。在本个案例当中,就是合作商家通过这个接口像商城注册。

谈谈观察者模式

3.最后,我们需要一个Product类,没有具体实现,用来传递商品信息。

好,现在让我们来编写上架商品通知合作商家的代码:

谈谈观察者模式

我们通过一个线程来模拟这个商城每隔1秒上架一个新商品,并推送给合作商家。

接下来,来编写两个合作商家具体实现类:

Tmall和Jd:

谈谈观察者模式

谈谈观察者模式

最后,让我们来运行下这个商城,并把京东和天猫注册到商城的观察者列表里:

谈谈观察者模式

运行结果:

谈谈观察者模式

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/46930.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信