观察者模式(一)

原则:

依赖倒转,程序应该都依赖抽象,而不是依赖具体,从而使得各自的变化不会影响到另一边的变化。


What?

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。


理解:

挨个通知消息

我们假想一下,如果米老师有消息要通知大家,他可以采取一种方式是:让我们把全部学生的名单告诉他,然后老师会挨个通知我们,老师会依赖与我们每一个学生,如果再新来几个同学,老师还要再去更新我们的名单,这样的工作量明显是很大的,如图一。


公告的引入:

我们有没有更简单高效的方法呢?当然有了,那就是公告的作用,我们都见过老师会在公告里发布消息,老师不需要知道我们是谁,他只需要在公告里发布消息就可以了,所以老师不会依赖与我们每个学生,我们学生人数增多或减少,对老师没有影响,因为他不需要要我们的名单。而我们每个人只需要做的就是打开自己的今目标,关注公告里的消息就可以了,所以我们也不依赖老师,米老师发布的消息我们可以看,孙老师,其他的任何老师发布的消息我们都能看。我们就是观察者,监听公告里的消息,当公告里有新消息时,我们会采取行动做公告里要求我们做的事情。如图二所示:


图一:



图二:



观察者模式结构图:



Subject类:

抽象通知者,当具体通知者发生变化时,观察者不会发生变化,观察者不需要只是具体通知者是谁,就像我们看到公告里有消息时,自动会点开阅读,不用去管是米老师发的,还是孙老师发的消息,我们去执行就可以了。


Observer类:

抽象类,定义了一个接口,方法Update方法,当接到通知时,会要求相应的子类更新自己。相当于当我们发现公告里有新消息时,会去看里面相应的消息。


什么时候使用?

当一个对象的改变需要同时改变其他对象的时候,即一方面依赖与另一方面,我们不希望这样,这时我们会引入观察这模式,定义抽象类和接口,然耦合双方都依赖与抽象,而不是依赖与具体,从而使各自的变化不会影响到另一边的变化。


总结

观察者模式就是通过定义抽象类,让某一面具体的类依赖另一面抽象的类,从而使一面的改变不会影响到另一面的对象。


观察者模式有什么不足?以及如何改进?下次再见,期待您的阅读。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗琪小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值