观察者模式

模式定义:简单来讲,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监控一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的所有观察者对象,使这些观察者对象能够更新自身。


模式中涉及的四个角色:

1、 Subject主题角色(被观察的对象接口)

1.1被观察者的统一接口;

1.2每个Subject可以有多个Observer对象的引用

采用Web商城来举例,比如我本人喜欢关注macbook啊,书籍啊,美食啊等商品。目前一直想买一个macbook,可是价格一直居高不下,那我只好等降价便宜了再去购买,没钱是硬伤。商城提供’降价后通知’功能,那么将我所关注的这些产品编写为抽象类,提供添加、删除、通知观察者等方法。比如目前有9个人关注了同一款macbook,然后当我点击’降价后通知’时,实际上就将我本人添加到了观察者列表中;删除同理。等了好久终于降价了,那么会将macbook降价的消息通过短信或者电子邮件的方法进行通知。

2、 ConcreteSubject(具体被观察对象)

2.1 维护队所有具体观察者的引用列表;

2.2 状态发生变化时会发送通知给所有注册的观察者。

该角色就好比上面举例中的macbook,引用列表就是所有关注该macbook的对象(人)的引用。

3、 Observer(观察者接口)

3.1 规定观察者的统一接口;

3.2 定义一个update方法。

       此角色为所有的对象(人)的抽象接口,update方法在主题状态发生改变时调用。

4、 ConcreteObserver(具体观察者角色)

4.1 实现Observer接口。

       在jdk中体现可以在java.util包下Observable类(被观察者)和Observer接口(观察者)查看源码。

观察者模式的应用场景: 
1、  对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。 
2、  对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值