`

Java中的观察者模式(Observer)

阅读更多
Java作为一种面向对象的开发语言,对实现设计模式提供了良好的支持,并且提供了许多默认的实现,比如:通过Java中的Observable类和Observer接口可以方便的实现观察者模式。

下面我们就用一个实际的例子来说明:日常生活中说起观察者,最常见的例子可能就是天气预报,在这里我们的观察对象是地球,而我们是通过发射气象卫星这个观察者来检测地球气象变化的。

所以这个例子中涉及三个对象:
地球 (Earth):                     被观察对象
气象卫星(Satellite):            观察者
气象局(WeatherService):    客户端调用


被观察对象:地球 (Earth)

import  java.util.Observable;

 /** */ /** 
 * 被观察对象:地球
 * 
 *  @author  zjun
 *  @version  1.0 create on 2006-5-18 9:42:45
  */ 
  public   class  Earth  extends  Observable   {
     private  String weather  =   " 晴朗 " ;

     /** */ /** 
     *  @return  Returns the weather.
      */ 
      public  String getWeather()   {
         return  weather;
    } 
 
      /** */ /** 
     *  @param  weather
     *            The weather to set.
      */ 
      public   void  setWeather(String weather)   {
         this .weather  =  weather;
         //  设置变化点 
         setChanged();
        notifyObservers(weather);
    } 
} 


[注意] 在需检测的对象前需要设置变化点setChanged()和通知观察者notifyObservers(),这两个函数是由Observable类实现的,封装了观察者模式实现的细节。


观察者:气象卫星(Satellite)

 import  java.util.Observable;
 import  java.util.Observer;

 /** */ /** 
 * 观察对象:气象卫星
 * 
 *  @author  zjun
 *  @version  1.0 create on 2006-5-18 9:46:30
  */ 
  public   class  Satellite  implements  Observer   {
     private  String weather;

     public   void  update(Observable obj, Object arg)   {
        weather  =  (String) arg;
         //  捕获天气变化情况,反馈给检测者 
         System.out.println( " 近期天气变化: "   +  weather);
    } 
} 


客户端调用:气象局(WeatherService)
/** */ /** 
 * 客户端调用:天气预报
 * 
 *  @author  zjun
 *  @version  1.0 create on 2006-5-18 9:57:19
  */ 
  public   class  WeatherService   {

     /** */ /** 
     *  @param  args
      */ 
      public   static   void  main(String[] args)   {
        Earth earth  =   new  Earth();
        
        Satellite satellite  =   new  Satellite();
         //  发射气象卫星 
         earth.addObserver(satellite);

        System.out.println( " 天气预报: " );
        System.out.println( " ------------ " );
        earth.setWeather( " 台风‘珍珠’逼近 " );
        earth.setWeather( " 大到暴雨 " );
        earth.setWeather( " 天气炎热 " );
    } 
} 


[运行结果] [b][/b]
天气预报:
------------
近期天气变化:台风‘珍珠’逼近
近期天气变化:大到暴雨
近期天气变化:天气炎热 
分享到:
评论

相关推荐

    Java内置观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...

    观察者模式Observer

    在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。开发者可以创建自己的类实现这两个接口,或者使用更现代的事件监听框架如JavaFX或Swing中的事件处理机制。 观察者...

    java观察者模式观察者模式

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 ### `...

    java 设计模式 观察者模式 简单实例 包括测试test类

    在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...

    设计模式之观察者模式(Observer Pattern)

    在Java、C#等面向对象编程语言中,观察者模式被广泛应用于用户界面、事件处理、游戏编程等领域。 在观察者模式中,通常有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它持有一个观察...

    设计模式之观察者模式(Observer)

    观察者模式在Java中得到了很好的支持,`java.util.Observable`和`java.util.Observer`是Java标准库提供的观察者模式实现。开发者可以方便地利用这两个类实现观察者模式,也可以根据实际需求自定义观察者接口和主题类...

    观察者模式observer

    在Java中,观察者模式的实现通常涉及到java.util.Observable和java.util.Observer接口。Observable类代表被观察的对象,Observer接口则表示观察者。当Observable对象的状态发生变化时,它会调用notifyObservers方法...

    Java观察者模式代码全解析

    在压缩包`ObserverModel`中,你应该能找到一个完整的Java观察者模式代码示例,包括主题和观察者的具体实现,以及如何使用它们进行交互。通过阅读和理解这段代码,你可以更深入地掌握观察者模式的运用。

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    java观察者模式Demo

    标题中的“java观察者模式Demo”指的是使用Java语言来演示观察者模式的应用。通常,这个Demo会包含一个可观察的对象(Observable)和多个观察者(Observer),当可观察对象的状态发生变化时,会触发通知机制,使得...

    java 了解观察者模式

    在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util.Observer`这两个接口。下面我们将详细探讨观察者模式的概念、工作原理以及如何在Java中实现它。 观察者模式的核心概念是“观察者”和“被...

    java 观察者模式 demo

    以下是一个简单的Java观察者模式的示例: ```java import java.util.Observable; import java.util.Observer; class WeatherData implements Observable { private float temperature; private float humidity; ...

    Java 观察者模式的浅析

    ### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖关系。当一个对象(主题)的状态发生变化时,所有依赖于它的对象(观察者)都会收到通知并自动...

    java实现观察者模式

    在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....

    观察者(Observer)模式

    在实际应用中,观察者模式常用于事件驱动的系统,例如GUI框架中的按钮点击事件、数据绑定框架中的属性变更监听等。通过观察者模式,你可以构建响应式、动态和灵活的系统,使代码更加模块化,易于维护和扩展。

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    观察者模式(Observer)

    在实际开发中,Java的`java.util.Observable`和`java.util.Observer`类提供了内置的观察者模式支持。而Spring框架中的`ApplicationEvent`和`ApplicationListener`也是观察者模式的应用,用于应用级别的事件监听。 ...

    观察者模式java实现观察者设计模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,我们可以利用Java提供的...

Global site tag (gtag.js) - Google Analytics