设计模式学习-观察者模式
2016-08-04 10:27
387 查看
1.定义定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。2.类图
public void notifyObservers(Object arg) { /* * a temporary array buffer, used as a snapshot of the state of * current Observers. */ Object[] arrLocal; synchronized (this) { /* We don't want the Observer doing callbacks into * arbitrary code while holding its own Monitor. * The code where we extract each Observable from * the Vector and store the state of the Observer * needs synchronization, but notifying observers * does not (should not). The worst result of any * potential race-condition here is that: * 1) a newly-added Observer will miss a * notification in progress * 2) a recently unregistered Observer will be * wrongly notified when it doesn't care */ //看这里 if (!changed) return; arrLocal = obs.toArray(); clearChanged(); } for (int i = arrLocal.length-1; i>=0; i--) ((Observer)arrLocal[i]).update(this, arg); }View Code6.思考思考如下两个问题性能问题 如果注册的观察者较多,或者观察者处理能力弱、耗时长,那么很可能出现性能问题,毕竟只是简单的遍历调用。订阅/发布 当然,对于订阅/发布模型的支持有更好的开源框架,各种mq实现了这种模型,并且是异步架构,性能也有保障。推或拉 大家都喜欢说推模式和拉模式。其实本质上来说都是推模式,这也是使用观察者模式带来的好处。拉模式只不过推了一个引用,可以通过这个引用拿到更多的信息而已。7.参考
1.《JAVA与模式》之观察者模式
相关文章推荐
- 观察者设计模式学习!
- 设计模式学习笔记(二十一)——Observer观察者
- HeadFirst 设计模式学习笔记2--观察者模式
- “设计模式”学习之八:备忘录、观察者与状态(行为型)
- head first 设计模式学习随笔(2)----观察者模式
- java 设计模式学习笔记(12) - 观察者模式
- 设计模式学习—Obeserver(观察者)
- 设计模式学习之二观察者模式(Observer)——参与气象观测站的设计
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 设计模式学习-每日一记(14.观察者模式)
- 学习设计模式之旅 / 观察者模式 (Observers) 推荐
- 学习的设计模式------观察者模式
- 设计模式学习2——观察者模式(Observer)
- java设计模式学习系列之六:Observer, 观察者模式---小例
- 学习设计模式之旅 / 观察者(Observers)委托实现.. 推荐
- 设计模式学习9 -- 观察者模式(Observer)
- 设计模式学习----观察者模式
- 设计模式学习笔记-观察者模式
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)