观察者模式

300 阅读1分钟

观察者模式

当一个对象(subject)的状态发生改变时,已经登记的其他对象能够观察到这一改变,从而作出自己相应的改变。通过这种方式来达到减少依赖关系,

\

\

\

举个例子:

以微信朋友圈为例子。

你就是subject,你的好友就是observer。你发了朋友圈(notify),你的好友们都可以看见,并且他们进行点赞和评论操作(update)。

\

Subject

我们把“你”抽象出来,就是这样:

“你”可以通过attach、detach来添加、删除观察者。

\

然后通过具体的“你”,来实现这些方法。

\

Observer

接下来把“好友”抽象出来

然后通过具体的“朋友”,可以进行一些诸如点赞,评论的操作。

\

测试

可以看到,通过concreteSubject(发朋友圈的人)维护了订阅关系,在通过notifyObserver方法通知订阅者(发朋友圈)之后,观察者都获取到信息,并进行相应的处理(看到点赞或评论。)

他们的关系可以如下图所示:

每个观察者只需要处理自身的逻辑就可以了。

如果有新的业务添加进来,也只需要implement一下Observer,再维护进observers容器中即可。解耦。