Head-First-Design-Patterns-master\src\headfirst\designpatterns\observer
例子:
建立追踪目前的天气状况(温度、湿度、气压),三种布告板,分别显示imuqian的状况,气象统计及简单的预报,当WeatherObject对象获得罪行的测量数据时,三种布告板必须实时更新
还是一个可以扩展的气象站,可以公布一组API,让其他开发人员可以写出自己的气象布告板
客户使用气象站之后,使用每个布告板都要付钱
观察者模式=出版者+订阅者
订报纸形式
出版者=“主题"(Subject)
订阅者="观察者"(Observer)
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
Java API有内置的观察者模式:java.util包(package)内包含最基本的Observer接口与Observer类
将对象实现观察者接口(java.util.Observer),然后调用任何Observable对象的addObserver()方法。不想再当观察者时可以调用deleteObserver()方法即可。
观察者将通知送出去:利用扩展的Observable接口产生“可观察者”类,然后,需要两个步骤:先调用setChanged()方法,标记状态已经改变的事实。然后调用两种notifyObservers()方法中的一个notifyobservers()或者notifyobservers(object arg)
观察者如何接收通知update(Observable o,Object arg)
观察者模式不仅可以主动推数据,也可以让观察者拉数据
java自带的观察者模式中observable是一个类,与之前讲的面向接口编程有违背之处,且Observable将关键的方法保护起来,违反了多用组合,少用继承,限制了他的使用和复用。
在JavaBeans中荷Swing中都使用到了观察者模式,如Button按钮事件。