- 浏览: 1231424 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
在上文:深入浅出设计模式二——WeatherData设计(观察者模式)实现一
我们利用了自己缩写的Subject和Observer类完成了天气预报系统。
在JAVA API中已有写好的观察者模式供我们使用,本文将利用它们重新写一个天气预报系统。
在java.util包中有两个类可观察者Observable和观察者Observer。分别相当于Subject类和Observer类。
在Observable类中已经实现了addObserver,deleteObserver,notifyObservers方法,需要注意的是notifyObservers调用前需要调用setChanged标志状态改变,如果要清除状态改变标志则调用clearChanged方法。
UML图如下:
代码如下:
package com.lwf.disign.learn.observer.weatherdata2; import java.util.Observable; public class WeatherData extends Observable{ private float temperature; private float humidity; private float pressure; public WeatherData(){} public float getTemprature(){ return temperature; } public float getHumidity(){ return humidity; } public float getPressure(){ return pressure; } public void measurementsChanged(){ setChanged(); notifyObservers(); } public void setMeasurements(float temperature,float humidity,float pressure){ this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } }
package com.lwf.disign.learn.observer.weatherdata2; import java.util.Observable; import java.util.Observer; public class CurrentConditionsDisplay implements Observer { Observable observable; private float temperature; private float humidity; private float pressure; public CurrentConditionsDisplay(Observable observable){ this.observable = observable; observable.addObserver(this); } public void update(Observable obs,Object arg) { if (obs instanceof WeatherData) { WeatherData weatherData = (WeatherData)obs; this.temperature = weatherData.getTemprature(); this.humidity = weatherData.getHumidity(); this.pressure = weatherData.getPressure(); display(); } } public void display() { System.out.println("Temperature:" + temperature + " Humidity:" + humidity + " Pressure:" + pressure); } }
测试类:
package com.lwf.disign.learn.observer.weatherdata2; public class WeatherDataTest { public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay o1 = new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(12, 23, 24); weatherData.setMeasurements(42, 55, 77); weatherData.setMeasurements(43, 55, 77); weatherData.setMeasurements(44, 55, 77); weatherData.setMeasurements(45, 55, 77); weatherData.setMeasurements(46, 55, 77); } }
输出结果为:
Temperature:12.0 Humidity:23.0 Pressure:24.0 Temperature:42.0 Humidity:55.0 Pressure:77.0 Temperature:43.0 Humidity:55.0 Pressure:77.0 Temperature:44.0 Humidity:55.0 Pressure:77.0 Temperature:45.0 Humidity:55.0 Pressure:77.0 Temperature:46.0 Humidity:55.0 Pressure:77.0
附件有代码文件。
关注变化:
我们看到JAVA内置的Observer模式的实现,它的Observable是一个类而不是一个接口,那么这个设计违背了面向接口编程,而不是面向实现编程的原则。所以如果当你需要从多个类继承的时候那么就不能使用Observale了。所以如果那种情况的话只能象weatherData的第一个实现一样,自己定义一个Subject接口。
其它JAVA类库使用观察者模式的情况
在JAVA SWING中使用的事件模型,给按钮添加事件的行为即是观察者模式。如下例:
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把每个观察者加入观察列表。一旦状态发生改变,则触发事件。
- weatherdata2.rar (1.1 KB)
- 下载次数: 4
发表评论
-
深入浅出设计模式十四——复合模式
2016-07-05 09:35 5743 -
深入浅出设计模式十一——组合模式
2016-07-05 09:31 4833 -
深入浅出设计模式十二-状态模式(行为型)
2010-07-20 16:27 1632定义: 状态模式: 允许对象在内部状态改变时改变它的行为 ... -
深入浅出设计模式十——迭代模式
2010-07-19 14:24 936我 -
代理模式\装饰模式\适配器模式区别
2010-07-16 17:16 2420代理模式\装饰模式\适配器模式它们有相似性,那么具体在什么情况 ... -
深入浅出设计模式十三——代理模式(结构型)
2010-07-16 11:29 874以下两篇文章分别讲了静态代理与动态代理 http://qu ... -
深入浅出设计模式九——模板方法模式(行为型)
2010-07-14 16:12 1031模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟 ... -
GRASP原则简介
2010-03-10 17:38 2410GRASP(General Responsibilit ... -
深入浅出设计模式六——封装调用(命令模式)
2010-03-08 15:35 1126命令模式: 将一个请求封装为一个对象,从而使你可用不同的请 ... -
深入浅出设计模式五——独一无二(单例模式)
2010-03-08 15:34 1098先看文章 :http://quicker.iteye.com/ ... -
深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)
2010-03-05 16:17 1297有关抽象工厂文章可先看:http://quicker.itey ... -
深入浅出设计模式四——比萨店生产比萨实现(工厂方法模式)
2010-03-04 17:11 2406在http://quicker.iteye.com/blog/ ... -
深入浅出设计模式三——Beverage实现(装饰者模式)
2010-03-03 17:31 1325上图的实现代码见 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现一
2010-03-01 14:31 1625UML详细图 良好的OO ... -
深入浅出设计模式一——Duck设计(策略模式)
2010-02-26 18:04 2156以下为针对上图所列代码: package com. ... -
深入浅出设计模式七——Adapter模式(结构型)
2010-02-22 15:45 1136将两个不兼容的类或者说没有关系的类纠合在一起使用。就要在使用 ... -
深入浅出设计模式八——Facade模式(结构型)
2010-02-22 15:06 1853外观模式定义: 外观模式:提供一个统一的接口,用来访问子系统 ... -
创建型——Builder模式
2010-02-04 16:04 992UML: 如何使用: ... -
创建型(单例模式)
2010-01-26 11:39 1014package com.lwf.create.singleto ... -
创建型——工厂模式(抽象工厂)
2010-01-19 23:56 1066UML图 特例图 以图的实现代码: ...
相关推荐
在本文中,我们将深入探讨设计模式中的一个经典案例——观察者模式(Observer Pattern),通过具体的实现来理解其工作原理。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生...
**观察者模式**是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这个模式在各种编程语言中都有广泛应用,包括Java、C#...
Java设计模式是软件开发中的重要概念,它们是解决常见编程问题的经验总结,使得代码更加...在给定的压缩包文件中,可能包含了更多关于如何在实际项目中应用观察者模式的详细代码示例,这将有助于深入理解这一设计模式。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
以上是关于工厂模式、单例模式和观察者模式的基本介绍和Java实现。这些设计模式在实际编程中有着广泛的应用,能帮助我们编写出更灵活、可维护的代码。在学习和使用这些模式时,应根据具体场景选择最适合的实现方式,...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
让我们深入探讨如何实现观察者模式: 1. **创建 Observable 类**:首先,你需要创建一个类继承自 `java.util.Observable`。这个类将作为被观察的对象,它需要维护状态,并在状态改变时通知观察者。例如,你可以创建...
本篇将深入探讨观察者模式的核心概念、实现原理及应用案例,旨在帮助初学者理解并掌握这一重要设计模式。 #### 观察者模式概述 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。...
在本书中,作者通过一个具体的案例——Weather-O-Rama气象站项目,深入浅出地讲解了观察者模式的实际应用。 **1. 项目背景** - **目标**: 构建一个下一代Internet气象观测站。 - **需求**: 需要实现三种不同的气象...
观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个"观察者模式简单例子"中,我们将通过一个天气预报...
观察者模式是一种非常实用的设计模式,尤其适合于实现事件驱动系统或需要动态更新数据的应用场景。通过本篇介绍的小型观察者模式框架,开发者可以快速地将观察者模式应用到实际项目中,提高系统的灵活性和可维护性。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的编程模型...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理、发布/订阅系统、以及...
**观察者模式(Observer Pattern)**是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
请根据观察者模式,用Java语言设计并实现气象站程序。其中,部分代码已经写好,包括: • 观察者接口 • 主题接口 • 显示板接口 • 测试程序 请在此框架下,继续完成CurrentConditionsDisplay、ForecastDisplay...
观察者模式是一种设计模式,主要用于在对象之间建立一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个气象站监测的例子中,观察者模式被用来处理气象数据的...