观察者模式有时又被称为发布/订阅模式或者从属模式。一个目标对象管理所有依赖于它的观察者对象,
并且在自身状态改变时主动发出通知。通知通常通过调用观察者所提供的方法来实现。
1、观察者模式的结构
- 抽象被观察者(Subject):抽象主题,提供接口供观察者订阅,退订;
- 具体观察者(ConcreteSubject):使用集合管理所有已经订阅的观察者;更新自身的方法
- 抽象观察者(Observer):定义接口,在获得被观察者的通知时更新自己
- 具体观察者(ConcreteObserver):抽象观察者实现
2、应用
假设有一台服务器需要发送消息给外围,已经订阅的客户端获得消息后需要更新自身,取消订阅就不会接收消息。
抽象被观察者
1 | package com.xiaopeng.observer; |
具体被观察者
1 | package com.xiaopeng.observer; |
抽象观察者
1 | package com.xiaopeng.observer; |
具体观察者
1 | package com.xiaopeng.observer; |
测试类
1 | package com.xiaopeng.observer; |
输出
1 | -------------已经注册的观察者------------- |
3、jdk中的使用
jdk中java.util.Observer以及java.util.Observable,对观察者模式进行了实现。
4、总结
可以发现:被观察者发出一次消息,所有注册的观察者都会更新自身的状态。
- 优点
- 观察者与被观察者之间属于轻度的关联关系,并且都是抽象耦合的易拓展
- 观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比较多的时候(一个对象既是观察者也是被观察者),性能问题是比较令人担忧的。
并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。
本文作者:
肖鹏
本文链接: http://www.xiaopeng.pro/articles/9a246216.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: http://www.xiaopeng.pro/articles/9a246216.html
版权声明: 本原创文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!