- 浏览: 498368 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (185)
- job (15)
- linux/windows/unix/bash/shell (31)
- JAVA/J2EE/spring/hibernate/struts (30)
- VC/C++ (48)
- mysql/postgresql (6)
- php/jsp/asp/pear (1)
- FMS/flex/openlaszlo/red5/openmeetings (34)
- apache/tomcat/ftp/svn (6)
- xen/vm/Hadoop/cloudcompute (6)
- visual studio/eclipse/zendstudi/ant (8)
- others (1)
- windows异常处理 __try __except (1)
- (1)
- matlab (4)
- android (0)
最新评论
-
hongzhounlfd:
很透彻,很详细
依赖注入和控制反转 -
jefferyqjy:
谢谢~言简意赅~很明了!
依赖注入和控制反转 -
elderbrother:
太好了,谢谢
依赖注入和控制反转 -
east_zyd_zhao:
终于搞明白了
依赖注入和控制反转 -
Dremeng:
完美,一看就懂理解透彻
依赖注入和控制反转
观察者模式:在对象之间建立一对多的关系,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
因为继承java.util.Observable和java.util.Observer已经介绍过了,今天我们介绍一个自己实现的观察者模式。上代码:
“主题”接口,负责增加、删除“观察者”,还有发布消息。
view plaincopy to clipboardprint?
public interface Subject {
public void registeObserver(Observer o);
public void removerObserver(Observer o);
public void notifyObserver();
}
public interface Subject {
public void registeObserver(Observer o);
public void removerObserver(Observer o);
public void notifyObserver();
}
“观察者”接口,只负责更新。
view plaincopy to clipboardprint?
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
“显示”接口,跟业务有关,在这里,我们用它来输入结果。
view plaincopy to clipboardprint?
public interface DisplayElement {
public void display();
}
public interface DisplayElement {
public void display();
}
“主题”的具体类,在这个类里面,它负责把一个“观察者”放进列表里面(registeObserver),接收它自己需要的信息(setMessage),并发布到所有的“观察者”去(notifyObserver)。
view plaincopy to clipboardprint?
public class WetherData implements Subject {
private ArrayList<Observer> observers;
private float temperature;
private float humidity;
private float pressure;
public WetherData() {
observers = new ArrayList<Observer>();
}
public void registeObserver(Observer o) {
observers.add(o);
}
public void removerObserver(Observer o) {
observers.remove(o);
}
public void notifyObserver() {
for (Iterator iterator = observers.iterator(); iterator.hasNext();) {
Observer observer = (Observer) iterator.next();
observer.update(temperature, humidity, pressure);
}
}
public void messageChange() {
this.notifyObserver();
}
public void setMessage(float temp, float humidity, float pressure) {
this.temperature = temp;
this.humidity = humidity;
this.pressure = pressure;
notifyObserver();
}
}
public class WetherData implements Subject {
private ArrayList<Observer> observers;
private float temperature;
private float humidity;
private float pressure;
public WetherData() {
observers = new ArrayList<Observer>();
}
public void registeObserver(Observer o) {
observers.add(o);
}
public void removerObserver(Observer o) {
observers.remove(o);
}
public void notifyObserver() {
for (Iterator iterator = observers.iterator(); iterator.hasNext();) {
Observer observer = (Observer) iterator.next();
observer.update(temperature, humidity, pressure);
}
}
public void messageChange() {
this.notifyObserver();
}
public void setMessage(float temp, float humidity, float pressure) {
this.temperature = temp;
this.humidity = humidity;
this.pressure = pressure;
notifyObserver();
}
}
“观察者”具体类,他在初始化的时候,就在“主题”里注册了,update方法是继承Observer的,它会被自动调用。
view plaincopy to clipboardprint?
public class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temperature;
private float humidity;
private Subject wetherData;
public CurrentConditionsDisplay(Subject wetherData) {
this.wetherData = wetherData;
wetherData.registeObserver(this);
}
public void update(float temp, float humidity, float pressure) {
this.temperature = temp;
this.humidity = humidity;
display();
}
public void display() {
System.out.println("CurrentConditions:" + temperature
+ " F degrees and " + humidity + " %humidity");
}
}
public class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temperature;
private float humidity;
private Subject wetherData;
public CurrentConditionsDisplay(Subject wetherData) {
this.wetherData = wetherData;
wetherData.registeObserver(this);
}
public void update(float temp, float humidity, float pressure) {
this.temperature = temp;
this.humidity = humidity;
display();
}
public void display() {
System.out.println("CurrentConditions:" + temperature
+ " F degrees and " + humidity + " %humidity");
}
}
Test类,可见,只要注册了,当“主题”数据变化的时候,就会自动发布给“观察者”。
view plaincopy to clipboardprint?
public class WetherCondition {
public static void main(String[] args) {
WetherData wetherData = new WetherData();
CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(
wetherData);
wetherData.setMessage(80, 65, 30.4f);
}
}
public class WetherCondition {
public static void main(String[] args) {
WetherData wetherData = new WetherData();
CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(
wetherData);
wetherData.setMessage(80, 65, 30.4f);
}
}
“观察者”模式其实很简单,就会一个注册,然后在把List迭代,把List里面的元素全部发送一次,就OK啦。自己实现的观察者模式比api的那个好一点,灵活性强,关键的是,它是一个接口,api的是一个类。基于对接口编程的思想,我们应该尽量考虑自己实现观察者模式。
当然,这里只是一个非常简单的例子,在实际应用中,观察者模式是非常常用,而且层次也会很多的。具体问题具体分析。好了,写了2个观察者模式了,观察者模式到此为止。谢谢!O(∩_∩)O哈哈~
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuyuyuck/archive/2010/02/04/5288599.aspx
发表评论
-
剖析Android消息机制
2011-10-26 15:56 1043剖析Android消息机制 在Android中,线程内部或者 ... -
Chapter 6 Exceptions(JAVA EXCEPTION IN NATIVE CODE)
2011-09-26 09:53 1500Contents | Prev | Next | Index ... -
JNI编程中如何传递参数和返回值。
2011-09-14 17:51 1794首先要强调的是,native方法不但可以传递Java的基本类型 ... -
Windows Mobile与Android应用开发对比
2011-09-06 11:44 1298Windows Mobile在经历过最初的Wince系列,po ... -
android和JNI经典blog.doc
2011-09-01 15:29 1753Android JNI调用 2011-02-24 1 ... -
java中的jar关联SRC调试
2011-07-31 21:28 1115我现在的方法是: 打开后看到的是.class文件,然后点ch ... -
android 调用C++的so
2011-07-08 18:36 4400第一步:开发环境的安 ... -
JAVA环境变量配置和详解
2011-07-08 13:46 1216你知道Java环境变量如何配置吗,这里和大家分享一下,主要包括 ... -
数据库试题
2010-12-23 20:05 3584www.zhrtvu.net/oldpage/depart ... -
Apache MINA
2010-11-01 21:04 1086Apache MINA是一个网络应用程序框架,用来帮助用户简单 ... -
JMX
2010-11-01 21:03 1126百科名片 JMX(Java Management ... -
依赖注入和控制反转
2010-10-25 10:57 29130依赖注入和控制反转 ... -
jrdesktop
2010-10-14 15:32 1530jrdesktop(Java Remote Desktop)是 ... -
Apache MINA
2010-10-14 10:28 1064Apache MINA是一个网络应用程序框架,用来帮助用户简单 ... -
XDoclet
2010-10-14 09:38 928XDoclet XDoclet是一个开源项目,可以从这里 ... -
log4j
2010-10-14 09:37 983Log4j是Apache的一个开放源代码项目,通过使用Log4 ... -
Jakarta项目
2010-10-14 09:35 1139Jakarta项目 Apache基金旗下的开源Java项目社 ... -
JMF(java media framework)综述
2010-10-14 09:34 4351摘要: 本文先简述了JM ... -
slf4j
2010-10-14 09:31 1098slf4j-logo SLF4J不是具 ... -
jUINT
2010-10-14 09:23 1367JUnit是由 Erich Gamma 和 Kent Beck ...
相关推荐
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...
观察者模式是面向对象设计中的一种经典模式,它在软件工程中扮演着重要的角色,用于实现对象间的松耦合。这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java或其他面向对象语言中,这种模式通常用于实现事件处理或发布/订阅系统。在给定的“观察者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
### Unity3D设计模式之观察者模式 #### 观察者模式概述 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式之一。它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它...
### 观察者模式概述与应用 #### 一、观察者模式定义 观察者模式是一种常用的软件设计模式,主要用于处理对象间的依赖关系。在这种模式下,一个对象(称为“主题”或“被观察者”)负责维护一组依赖于它的对象...