设计模式心得:观察者模式 (observer pattern)
2015-01-26 09:19
459 查看
应用很好理解:一个subject,希望在更新的时候 (更新的定义可以从setChanged方法获得,例如,小于5的更新不通知,见下),自动通知一个observer list。 每个观察者收到更新后的动作与subject无关,大家可以自由加入/离开observer list。
java.util自带Observer, 类图 (来源Head First Design Patterns):
需要被观察的,顾名思义继承Observable类, Observable类自带Observer List以及添加删除等操作,不用重写。 需要通知时,call notifyObservers(). 但是注意,call前需要call setChanged(). setChanged()用来控制什么样的change算是需要通知Observer的change。
观察者在构造时加入Observer List, 并具体在update()方法里进行update的工作。 注意: update()有几种形式:
update(Observable obs, Object arg) : obs用来通知是哪个主题在通知update, arg则是这个主题推送的对象。
如果Observable notify是使用notifyObservers(),则意味着arg为null,使用的是pull的方法,观察者获得了整个obs
如果notify使用notifyObservers(Object obj), 则意味着Observable在push, 观察者可以使用arg。
Sample Observer code (Observable code is obvious):
使用内置Java library的坏处: 虽然Observer是接口,但是Observable是类,只能继承,影响继承其他东西。
java.util自带Observer, 类图 (来源Head First Design Patterns):
需要被观察的,顾名思义继承Observable类, Observable类自带Observer List以及添加删除等操作,不用重写。 需要通知时,call notifyObservers(). 但是注意,call前需要call setChanged(). setChanged()用来控制什么样的change算是需要通知Observer的change。
观察者在构造时加入Observer List, 并具体在update()方法里进行update的工作。 注意: update()有几种形式:
update(Observable obs, Object arg) : obs用来通知是哪个主题在通知update, arg则是这个主题推送的对象。
如果Observable notify是使用notifyObservers(),则意味着arg为null,使用的是pull的方法,观察者获得了整个obs
如果notify使用notifyObservers(Object obj), 则意味着Observable在push, 观察者可以使用arg。
Sample Observer code (Observable code is obvious):
class sampleObserver implements Observer { Observable observable; int var1; sampleObserver(Observable _observable) { observable = _observable; observable.addObserver(this); } public void update(Observable obs, Object arg) { //if it is push --> arg has something //update with arg.getXXX //if it is pull, use obs UsefulData data = (UsefulData)obs; var1 = data.getVar1(); } public void display() { //whatever way to display var1 } }
使用内置Java library的坏处: 虽然Observer是接口,但是Observable是类,只能继承,影响继承其他东西。
相关文章推荐
- 设计模式之观察者模式(Observer Pattern)(一)
- .NET设计模式(19):观察者模式(Observer Pattern)
- Java设计模式—观察者模式(Observer pattern)
- Net设计模式实例之观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 深入浅出设计模式-002:观察者模式(Observer Pattern)
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(2)
- Head First 设计模式——观察者模式(Observer Pattern)——Python实现(3)
- Net设计模式实例之观察者模式(Observer Pattern)
- 【转载】.NET设计模式之观察者模式(Observer Pattern)
- 设计模式17:Observer Pattern (观察者模式)
- 我读设计模式之观察者模式(Observer Pattern)
- Net设计模式之观察者模式(Observer Pattern)(2)
- .NET设计模式(19):观察者模式(Observer Pattern)
- 设计模式之观察者模式(Observer Pattern)(二)
- Net设计模式之观察者模式(Observer Pattern)(1)
- 设计模式学习笔记--Observer Pattern观察者模式
- .NET设计模式:观察者模式(Observer Pattern)
- Java设计模式—观察者模式(Observer pattern)
- .NET设计模式-观察者模式(Observer Pattern)