`

Java:应用Observer接口实践Observer模式(转)

    博客分类:
  • Java
 
阅读更多

转自:http://zhangjunhd.blog.51cto.com/113473/68949   

Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。

1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
addObserver()方法把观察者对象添加到观察者对象列表中。
 
当被观察事件发生时,执行:
setChanged();
notifyObservers();
setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observerupdate()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()
 
[4]对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,argnull
2.实例一
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
NumObserable.java
package com.zj.observer;
import java.util.Observable;
 
public class NumObservable extends Observable {
    private int data = 0;
 
    public int getData() {
       return data;
    }
 
    public void setData(int i) {
       data = i;
       setChanged();
       notifyObservers();
    }
}
 
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行uodate()方法。
NumObserver.java
package com.zj.observer;
import java.util.Observable;
import java.util.Observer;
 
public class NumObserver implements Observer{
    public void update(Observable o, Object arg) {
       NumObservable myObserable=(NumObservable) o;
       System.out.println("Data has changed to "+myObserable.getData());
    }
}
 
测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
SingleTest.java
package com.zj.observer;
 
public class SingleTest {
    public static void main(String[] args) {
       NumObservable number = new NumObservable();
       number.addObserver(new NumObserver());
       number.setData(1);
       number.setData(2);
       number.setData(3);
    }
}
结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3
3.实例二
这个实例中,还是对data进行观察,拥有两个观察者,分别观察奇数和偶数的变化,通过notifyObservers(arg)中的参数arg来识别通知信息。
被观察者NumsObservable.java
package com.zj.observers;
import java.util.Observable;
 
public class NumsObservable extends Observable {
    public final static Integer ODD = 1;
    public final static Integer EVEN = 2;
    private int data = 0;
 
    public int getData() {
       return data;
    }
 
    public void setData(int i) {
       data = i;
       Integer flag = EVEN;
       if ((data & 0x0001) == 1)
           flag = ODD;
       setChanged();
       notifyObservers(flag);
    }
}
 
奇数观察者OddObserver.java
package com.zj.observers;
import java.util.Observable;
import java.util.Observer;
 
public class OddObserver implements Observer {
    public void update(Observable o, Object arg) {
       if (arg == NumsObservable.ODD) {
           NumsObservable myObserable = (NumsObservable) o;
           System.out.println("OddObserver:Data has changed to " + myObserable.getData());
       }
    }
}
 
偶数观察者EvenObserver.java
package com.zj.observers;
import java.util.Observable;
import java.util.Observer;
 
public class EvenObserver implements Observer {
    public void update(Observable o, Object arg) {
       if (arg == NumsObservable.EVEN) {
           NumsObservable myObserable = (NumsObservable) o;
           System.out.println("EvenObserver:Data has changed to " + myObserable.getData());
       }
    }
}
 
测试类MultiTest.java
package com.zj.observers;
 
public class MultiTest {
    public static void main(String[] args) {
       NumsObservable number = new NumsObservable();
       number.addObserver(new OddObserver());
       number.addObserver(new EvenObserver());
       number.setData(1);
       number.setData(2);
       number.setData(3);
    }
}
结果:
OddObserver:Data has changed to 1
EvenObserver:Data has changed to 2
OddObserver:Data has changed to 3
分享到:
评论

相关推荐

    Java 设计模式最佳实践

    Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...

    OBserver模式设计实现

    标题中的"OBserver模式设计实现"是指探讨如何在实际编程中应用观察者模式,无论是用Java还是C++。Head First系列书籍是著名的编程学习资源,以易懂的方式解释复杂的设计模式。在描述中提到的"Head First模式设计用的...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    Java的`Observer`和`Observable`接口实现了观察者模式。 13. **责任链模式**:避免请求的发送者和接收者之间的耦合,将多个处理者组织成链,请求沿着链传递,直到被某个处理者处理。在Java中,异常处理机制某种程度...

    java设计模式之Observer[整理].pdf

    在这个场景中,我们将讨论如何在Java中应用Observer模式,特别是在电子商务系统中的应用。 Observer模式的核心思想是定义一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化...

    设计模式:Java语言中的应用.zip

    1. 创建型模式:这类模式主要处理对象的创建,使得代码与对象的创建过程解耦。包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)...

    设计模式之Observer

    在Java中,`java.util.Observable`类和`java.util.Observer`接口就是对Observer模式的一种实现。`Observable`类代表主题,`Observer`接口代表观察者。当我们创建一个`Observable`对象并添加`Observer`对象到其观察者...

    Observer观察者模式

    在Java中,Observer模式主要通过java.util.Observable和java.util.Observer接口来实现。Observable类代表被观察的对象,它可以添加观察者,删除观察者,并通知所有的观察者。Observer接口则定义了一个update方法,当...

    Java EE设计模式:Spring企业级开发最佳实践

    Java EE 设计模式:Spring 企业级开发最佳实践 Java EE 设计模式是指在 Java 企业版(Java Enterprise Edition)中应用的设计模式,旨在提高软件系统的可维护性、可扩展性和可重用性。Spring 是当前最流行的 Java ...

    java与模式,设计模式的应用

    5. 观察者模式:Java.util.Observable和java.util.Observer接口提供了观察者模式的支持,广泛应用于事件驱动编程,例如GUI组件间的通信。 6. 模板方法模式:在Java中的JDBC模板类,如JdbcTemplate,定义了数据库...

    设计模式:Java语言中的应用

    本资源“设计模式:Java语言中的应用”提供了一个深入理解和应用设计模式的平台,适合Java开发者和软件架构师学习。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式通常通过私有...

    设计模式 在java语言中的应用

    在Java中,设计模式的应用不仅限于上述介绍,还包括其他如命令模式(Command)、迭代器模式(Iterator)、备忘录模式(Memento)、模板方法模式(Template Method)等。这些模式在设计复杂系统时起着关键作用,比如...

    源程序:《设计模式 java语言中的应用》书中用到得源程序

    《设计模式:java语言中的应用》这本书深入探讨了如何在Java中应用设计模式,这些模式是软件开发中的最佳实践,可以提高代码的可读性、可维护性和复用性。 1. **State模式**:State模式允许对象在其内部状态改变时...

    Java EE设计模式:Spring企业级开发最佳实践_JavaEE_企业应用开发_

    《Java EE设计模式:Spring企业级开发最佳实践》是一本深度探讨如何在企业级Java应用程序中有效运用设计模式的著作。这本书聚焦于Spring框架,它作为Java EE领域中最为广泛使用的开源框架之一,极大地简化了企业级...

    设计模式:Java语言中的应用.rar

    本资料“设计模式:Java语言中的应用.rar”详细探讨了如何在Java环境中有效地运用这些模式。 首先,我们要理解设计模式的基本分类。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例...

    SimpleTodo:Codepath Observer 类的合格项目

    总之,"SimpleTodo:Codepath Observer 类的合格项目"是一个学习和实践Observer模式的绝佳案例,它涵盖了Android开发中的数据持久化、事件驱动编程和UI更新等重要概念,对于Java和Android开发者来说,这是一个不容...

    java 设计模式详解

    Java.util.Observable和Observer接口就是观察者模式的实现。 10. 装饰模式:装饰模式动态地给一个对象添加一些额外的职责。它提供了比继承更多的灵活性,避免了因为功能增加而导致类的急剧膨胀。 以上只是部分设计...

    java23种设计模式详解+源码(绝对详解)

    在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...

    java接口的妙用.txt

    另外,接口还用于实现依赖注入(Dependency Injection),策略模式(Strategy Pattern),观察者模式(Observer Pattern)等设计模式,这些都是软件工程中常见的设计原则和模式。 ### 结论 总之,Java接口不仅提供了强大...

Global site tag (gtag.js) - Google Analytics