观察者模式在对象间定义一对多的依赖,当一个对象改变状态,依赖它的对象都会收到通知。
类图:
一. java swing
swing 注册事件监听器过程,就是观察者模式。
// 注册监听事件 button.addActionListener( new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { System.out.println("Hello"); } });
源码跟踪:
listenerList.add(ActionListener.class, l);// 添加至监听列表
actionPerformed(event);
fireActionPerformed(event);// 遍历监听列表,向所有对象发送event
二. java.util.Observable
java内置了观察者实现类Observable类,直接继承即可。
// 展示接口 interface DisplayElement{ public void display(); } // 主题 class WeatherData extends Observable{ private float temperature; private float pressure; public void measurementChanged(){ this.setChanged(); // 指示状态改变 this.notifyObservers(); // 通知观察者 } public void setMeasurement(float temperature, float pressure){ this.temperature = temperature; this.pressure = pressure; measurementChanged(); } } // 观察者 class ForecastDisplay implements Observer, DisplayElement{ private Observable observable; // 被观察者引用 private float temperature; private float pressure; public ForecastDisplay(Observable observable){ this.observable = observable; // 添加观察者 this.observable.addObserver(this); } @Override public void display() { System.out.println("Forecast temperature: " + temperature + " pressure:" + pressure); } @Override public void update(Observable o, Object arg) { if (o instanceof WeatherData){ WeatherData data = (WeatherData)o; this.temperature = data.getTemperature(); this.pressure = data.getPressure(); display(); } } }
源码跟踪:
observable.addObserver(this);
Vector<Observer>::addElement(o);
this.notifyObservers();// 从尾部开始遍历,后添加先通知
相关推荐
Qt设计模式之观察者模式
设计模式之观察者模式Java版本实现和UML类设计图
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
设计模式 之观察者模式.pdf
设计模式之观察者模式介绍观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个
23种设计模式之观察者模式对观察者模式进行了简单的介绍,并附带了例子程序,和大家分享
Android设计模式之观察者模式
NULL 博文链接:https://jacky-dai.iteye.com/blog/1132063
观察者设计模式-Demo 事件委托、改变窗体颜色.... 希望对大家有用!!!!
C++源码实现设计模式之观察者模式,VC2005下编译通过
观察者模式
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
java观察者模式的实例代码。从最简单的实例开始,到观察者模式。有什么问题可以加扣扣共同探讨