设计模式之观察者模式
程序员文章站
2022-05-28 14:14:40
...
观察者模式在对象间定义一对多的依赖,当一个对象改变状态,依赖它的对象都会收到通知。
类图:
一. 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();// 从尾部开始遍历,后添加先通知
上一篇: thrift servlet
下一篇: Zookeeper
推荐阅读
-
代理角色java设计模式之静态代理详细介绍
-
C#设计模式之Facade外观模式解决天河城购物问题示例
-
C#设计模式之Template模板方法模式实现ASP.NET自定义控件 密码强度检测功能
-
C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例
-
C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例
-
C#设计模式之ChainOfResponsibility职责链模式解决真假美猴王问题实例
-
C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例
-
C#设计模式之Strategy策略模式解决007大破密码危机问题示例
-
基于Android设计模式之--SDK源码之策略模式的详解
-
23种设计模式(20)java中介者模式