我对观察者模式的理解,之前一直很乱

我对观察者模式的理解

观察者模式

观察者模式简单理解就是,有一方有新动作,另一方也会跟着响应作出改变,比如你点击了一个关闭按钮,跟关闭按钮相关的窗体或者是页面或者其他东西会有响应,比如窗体关闭了,页面关闭了。观察者模式就是建立这个按钮跟这个窗体进行联系的方法。观察者模式也可以称为发布--订阅模式,在发布、订阅模式里,发布方是被观察者,订约方是观察者。有的资料也把被观察者称作subject(主题)。

以下是错误理解!!!
以前我很容易混淆的概念就是,观察者是干什么的,按照现实中的理解,他不是主动去观察别人吗,比如小明是观察者,小明去观察正在学骑车的儿子,小明观察到他儿子做的不对,就通知他儿子该怎么做,然后小明儿子对小明的通知做出响应。
放到发布–订阅模式里就是:发布方去观察订阅方,这里的观察只是为了要通知订阅方,A,B,C向发布方订阅,于是发布方观察了A,B,C,发布方一旦有新的材料发布,发布方就通知他们,然后订阅方们收到通知后就做出相关响应。也就是说,发布方是观察者,订阅方是被观察者。

正确思路刚好相反
发布方是被观察者,订阅方是观察者,被观察者要干嘛呢,观察者又要干嘛呢,他们是如何联系起来的呢,也就是说如何“发送”通知呢,让响应发生呢?
被观察者要干嘛:
1.添加观察者,不是观察者主动去观察被观察者,是被观察者想要被那位观察者观察,然后就让谁观察,用发布订阅的模式说,就是发布方想让哪几个订阅方订阅,就让哪几个订阅方订阅,被观察者维护一个观察者数组,数组里面装着他的观察者们,比如发布方维护一个订阅方数组,【小甲,小乙,小丁】,就是这三人向发布方订阅了,现在小丙也想订阅,于是发布方调用 他的方法把小丙添加到数组里,发布方.add(小丙),现在发布方就有四个订阅者了,就是【小甲,小乙,小丁,小丙】。
2.通知观察者,把他维护的数组里的订阅者一个个全都通知。
观察者要干嘛:
观察者一般情况下啥也不用干,他有一个响应方法(虽然被称作观察者,但他什么也不用观察,这里的观察顶多是指让被观察者把自己放到被观察者的数组里,之前我还以为他必须时时刻刻观察被观察者呢。。),就等着被通知,被通知后执行自己的响应方法。
如何通知让被观察者与观察者联系起来,如何通知以及响应:
其实就是被观察者发生了某事后,去调用观察者的方法,“调用”就把通知跟响应两个过程一起包办了,我调用你就是我通知你,调用你的响应方法就是你的响应。比如
被观察者.doSomething() {
xxx
xxx
观察者.自己的方法();
}

  为什么被观察者能调用观察者的方法呢,因为他维护的数组里有观察者呀。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值