- 浏览: 1229116 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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问题
UML详细图
良好的OO设计必须具备可复用、可扩展、可维护三个特性。
观察者模式:
出版者+订阅者=观察者模式
条件:订阅者向出版者订阅报纸; 出版者一旦有新报纸或有更新的报纸,就会给订阅者送达; 当订阅者不想再看报纸的时候,可取消订阅,这样出版者不再向取消订阅者送报纸; 只要报社还在运营,就会有人向他们订阅报纸。
这里将出版者抽象为Subject(主题),将订阅者抽象为observer(观察者)
类似的求职者与猎头也可以这样抽象。如多个求职者打电话给猎头;猎头把他们加入求职列表之中,一旦有对应的职位就打电话通知相应的求职者;求职者也可以自己出去找工作,找到工作打电话告诉猎头不需要它帮助了,猎头把该求职者从求职列表中删除。
观察者模式的定义:
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者提供了一种对象设计,让主题和观察者之间松耦合。
在观察者模式中,主题与观察者之间是松耦合关系,增加观察者可删除观察者主题的代码不用修改,主题不会受任何影响。
设计原则四:为了交互对象之间的松耦合设计而努力。
实例一:天气预报,系统通过WeatherData获取观测到的数据,可能有多个布告板用来显示天气数据。当天气数据改变时要求实时更新布告板中的显示。要求程序员可以利用此API增加、删除自己的布告板及显示的内容。
此例符合观察者模式的要求。
天气预报系统的观察者模式图如下:
实现代码如下:
package com.lwf.disign.learn.observer.weatherdata; public interface Subject { void registerObserver(Observer o); void removeObserver(Observer o); void notifyObserver(); }
package com.lwf.disign.learn.observer.weatherdata; public interface Observer { void update(); }
package com.lwf.disign.learn.observer.weatherdata; import java.util.ArrayList; public class WeatherData implements Subject{ ArrayList observerList; private float temperature; private float humidity; private float pressure; public WeatherData(){ observerList = new ArrayList(); } public void notifyObserver() { for(int i=0;i<observerList.size();i++){ Observer o = (Observer)observerList.get(i); o.update(); } } public void registerObserver(Observer o) { observerList.add(o); } public void removeObserver(Observer o) { int i = observerList.indexOf(o); if(i>=0){ observerList.remove(o); } } public float getTemprature(){ return temperature; } public float getHumidity(){ return humidity; } public float getPressure(){ return pressure; } public void measurementsChanged(){ notifyObserver(); } 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.weatherdata; public class CurrentConditionsDisplay implements Observer, DisplayElement { WeatherData weatherData; private float temperature; private float humidity; private float pressure; public CurrentConditionsDisplay(WeatherData weatherData){ this.weatherData = weatherData; weatherData.registerObserver(this); } public void update() { this.temperature = weatherData.getTemprature(); this.humidity = weatherData.getHumidity(); this.pressure = weatherData.getPressure(); this.display(); } public void display() { System.out.println("Temperature:" + temperature + " Humidity:" + humidity + " Pressure:" + pressure); } }
package com.lwf.disign.learn.observer.weatherdata; public interface DisplayElement { void display(); }
下面是测试类:
package com.lwf.disign.learn.observer.weatherdata; public class WeatherDataTest { public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay o1 = new CurrentConditionsDisplay(weatherData); CurrentConditionsDisplay o2 = new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(12, 23, 24); weatherData.setMeasurements(45, 55, 77); weatherData.removeObserver(o1); weatherData.setMeasurements(13, 23, 24); } }
输出结果:
Temperature:12.0 Humidity:23.0 Pressure:24.0 Temperature:12.0 Humidity:23.0 Pressure:24.0 Temperature:45.0 Humidity:55.0 Pressure:77.0 Temperature:45.0 Humidity:55.0 Pressure:77.0 Temperature:13.0 Humidity:23.0 Pressure:24.0
上面实例源代码见附件:weatherdataSrc1.rar
- weatherdataSrc1.rar (1.7 KB)
- 下载次数: 4
发表评论
-
深入浅出设计模式十四——复合模式
2016-07-05 09:35 5643 -
深入浅出设计模式十一——组合模式
2016-07-05 09:31 4733 -
深入浅出设计模式十二-状态模式(行为型)
2010-07-20 16:27 1626定义: 状态模式: 允许对象在内部状态改变时改变它的行为 ... -
深入浅出设计模式十——迭代模式
2010-07-19 14:24 932我 -
代理模式\装饰模式\适配器模式区别
2010-07-16 17:16 2415代理模式\装饰模式\适配器模式它们有相似性,那么具体在什么情况 ... -
深入浅出设计模式十三——代理模式(结构型)
2010-07-16 11:29 869以下两篇文章分别讲了静态代理与动态代理 http://qu ... -
深入浅出设计模式九——模板方法模式(行为型)
2010-07-14 16:12 1028模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟 ... -
GRASP原则简介
2010-03-10 17:38 2405GRASP(General Responsibilit ... -
深入浅出设计模式六——封装调用(命令模式)
2010-03-08 15:35 1123命令模式: 将一个请求封装为一个对象,从而使你可用不同的请 ... -
深入浅出设计模式五——独一无二(单例模式)
2010-03-08 15:34 1095先看文章 :http://quicker.iteye.com/ ... -
深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)
2010-03-05 16:17 1295有关抽象工厂文章可先看:http://quicker.itey ... -
深入浅出设计模式四——比萨店生产比萨实现(工厂方法模式)
2010-03-04 17:11 2399在http://quicker.iteye.com/blog/ ... -
深入浅出设计模式三——Beverage实现(装饰者模式)
2010-03-03 17:31 1322上图的实现代码见 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现二
2010-03-02 17:24 1215在上文:深入浅出设计模式二——WeatherData设计(观察 ... -
深入浅出设计模式一——Duck设计(策略模式)
2010-02-26 18:04 2150以下为针对上图所列代码: package com. ... -
深入浅出设计模式七——Adapter模式(结构型)
2010-02-22 15:45 1135将两个不兼容的类或者说没有关系的类纠合在一起使用。就要在使用 ... -
深入浅出设计模式八——Facade模式(结构型)
2010-02-22 15:06 1848外观模式定义: 外观模式:提供一个统一的接口,用来访问子系统 ... -
创建型——Builder模式
2010-02-04 16:04 987UML: 如何使用: ... -
创建型(单例模式)
2010-01-26 11:39 1007package com.lwf.create.singleto ... -
创建型——工厂模式(抽象工厂)
2010-01-19 23:56 1063UML图 特例图 以图的实现代码: ...
相关推荐
在本文中,我们将深入探讨设计模式中的"观察者模式",并以`WeatherData`为例进行具体实现。观察者模式是一种行为设计模式,它允许我们定义一个订阅机制,当对象状态发生变化时,可以通知所有依赖它的观察者。这种...
**观察者模式**是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这个模式在各种编程语言中都有广泛应用,包括Java、C#...
Java设计模式是软件开发中的重要概念,它们是解决常见编程问题的经验总结,使得代码更加...在给定的压缩包文件中,可能包含了更多关于如何在实际项目中应用观察者模式的详细代码示例,这将有助于深入理解这一设计模式。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,`java.util.Observable`和`java.util.Observer`接口提供了...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
本篇将深入探讨观察者模式的核心概念、实现原理及应用案例,旨在帮助初学者理解并掌握这一重要设计模式。 #### 观察者模式概述 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...
观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个"观察者模式简单例子"中,我们将通过一个天气预报...
在本书中,作者通过一个具体的案例——Weather-O-Rama气象站项目,深入浅出地讲解了观察者模式的实际应用。 **1. 项目背景** - **目标**: 构建一个下一代Internet气象观测站。 - **需求**: 需要实现三种不同的气象...
观察者模式是一种非常实用的设计模式,尤其适合于实现事件驱动系统或需要动态更新数据的应用场景。通过本篇介绍的小型观察者模式框架,开发者可以快速地将观察者模式应用到实际项目中,提高系统的灵活性和可维护性。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的编程模型...
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理、发布/订阅系统、以及...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...
**观察者模式(Observer Pattern)**是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
请根据观察者模式,用Java语言设计并实现气象站程序。其中,部分代码已经写好,包括: • 观察者接口 • 主题接口 • 显示板接口 • 测试程序 请在此框架下,继续完成CurrentConditionsDisplay、ForecastDisplay...
观察者模式是一种设计模式,主要用于在对象之间建立一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个气象站监测的例子中,观察者模式被用来处理气象数据的...
面向对象编程(OOP)是一种流行的编程范式,它通过将问题抽象...《Head First设计模式》通过丰富的实例和详细的解释,深入浅出地介绍了面向对象设计中常用的设计模式,帮助读者更好地理解和应用这些重要的编程概念。