观察者模式&&订阅发布模式
观察者模式
原理:其实就是在Subject
类中维护了一个Observer
的队列。
调用 Subject.订阅(mObserver)
方法就是把该mObserver
放入队列中。
当Subject中发生变化时,遍历Observer
队列,依次调用Observer的收到通知方法。
即完成了观察者模式。
这里有个纠结的地方困扰了我好久:明明是
Observer
观察者(比如用户、人)订阅了Subject
(比如报刊、公众号),代码里却要写成Subject.订阅(mObserver)
。很绕??这里这么想:
虽然是你订阅了报刊,实际上报刊在 订阅者列表 中把你加了进去。核心操作是由被观察者
Subject
做的!!!你关注了一个公众号,实际是你把你的ID告诉了公众号,让公众号每次更新的时候告诉你一声。核心是公众号,即被观察者。
所以是
Subject.订阅(mObserver)
发布/订阅模式
一开始以为两个模式是一样的。后来才发现还是有区别的:
严格来说,这种才是发布/订阅模式。
Publisher内部不直接维护一堆Subscribers,而是转交给经纪人Broker来维护。
这样才算真正解耦了,发布者和订阅者彼此都不知道彼此的存在,很干净。