首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

深入显出设计模式二——WeatherData设计(观察者模式)实现二

2012-11-11 
深入浅出设计模式二——WeatherData设计(观察者模式)实现二在上文:深入浅出设计模式二——WeatherData设计(观

深入浅出设计模式二——WeatherData设计(观察者模式)实现二

在上文:深入浅出设计模式二——WeatherData设计(观察者模式)实现一

我们利用了自己缩写的Subject和Observer类完成了天气预报系统。

在JAVA API中已有写好的观察者模式供我们使用,本文将利用它们重新写一个天气预报系统。

在java.util包中有两个类可观察者Observable和观察者Observer。分别相当于Subject类和Observer类。

在Observable类中已经实现了addObserver,deleteObserver,notifyObservers方法,需要注意的是notifyObservers调用前需要调用setChanged标志状态改变,如果要清除状态改变标志则调用clearChanged方法。

?

UML图如下:

深入显出设计模式二——WeatherData设计(观察者模式)实现二

代码如下:

?

测试类:

package com.lwf.disign.learn.observer.weatherdata2;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class SwingObserverExample {JFrame frame;public static void main(String[] args) {SwingObserverExample s = new SwingObserverExample();s.go();}public void go(){frame = new JFrame();JButton button = new JButton("should i do");button.addActionListener(new AngleListener());button.addActionListener(new DeviListener());frame.getContentPane().add(BorderLayout.CENTER,button);frame.setVisible(true);}class AngleListener implements ActionListener{public void actionPerformed(ActionEvent e) {System.out.println("anglelistener");}}class DeviListener implements ActionListener{public void actionPerformed(ActionEvent e) {System.out.println("deviListener");}}}

?

按钮通过addActionListener把每个观察者加入观察列表。一旦状态发生改变,则触发事件。

?

热点排行