设计模式之观察者模式

观察者模式定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它所有的依赖者都会收到通知并自动更新。

观察者模式类图(并非标准的UML):


ISubject为主题接口,对象利用此接口注册为观察者,或者把自己从观察者中删除。每个主题可以有多个IObserver观察者。

IObserver为观察者接口,所有潜在的观察者都必须实现此接口,该接口中只有一个update()方法,当主题状态改变时,该方法被调用。

Subject是一个具体主题,其总是实现主题接口,除了注册和撤销方法之外,具体主题还实现了notifyObservers()方法,此方法用于在主题状态改变时更新所有的观察者。

Observer1和Observer2都是具体观察者,它们可以是实现了IObserver接口的任意类。观察者必须注册到具体的主题中,以便接收更新。

观察者模式优缺点:
    1、如果程序在后期维护时经常需要添加或者移除相关功能模块,可以使用观察者模式,工作量会很小,可维护性会非常好。(优点)

    2、因为各个模块分散,后面的功能方法可能重叠之前的功能,导致数据错误,所以在使用时尽量多做一步注释或者整理好文档。(缺点)

观察者模式应用实例:

    对于一个微信公众号,其会不定时发送一些消息,关注该公众号就可以收到消息,取消关注就不再收到消息。

Java内置的观察者模式:
    Java内置的观察者模式有两种传送数据的方式:“推”和“拉”。
    推:当主题状态改变时,主题会向所有的观察者推送数据。主题每更新一次状态都会向所有的观察者推送一次数据,但是并不是所有的观察者都需要此时的数据,这会造成资源浪费,也会使得主题负担较重。
    拉:在观察者需要数据的时候会主动去主题那拉数据回来。降低了主题的负担,同时不会有数据的浪费,但是其及时性有所欠缺。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值