设计模式(3)------观察者设计模式(jdk自带)

一:原理就是观察者设计模式的原理直接上图和代码

WeatherData(主题接口实现)

 1 public class WeatherData extends Observable {
 2     private float temperature;
 3     private float humidity;
 4     private float pressure;
 5
 6     public WeatherData() {
 7     }
 8
 9     public void measurementsChanged() {
10         setChanged();
11         notifyObservers();
12     }
13
14     public void setMeasurements(float temperature, float humidity, float pressure) {
15         this.temperature = temperature;
16         this.humidity = humidity;
17         this.pressure = pressure;
18         measurementsChanged();
19     }
20
21     public float getTemperature() {
22         return temperature;
23     }
24
25     public float getHumidity() {
26         return humidity;
27     }
28
29     public float getPressure() {
30         return pressure;
31     }
32 }

isplayElement.java(展示接口)

public interface DisplayElement {

public void display();

}

CurrentConditionsDisplay.java(观察者实现类)


package com.DesignPatterns.ab.observer2;

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

public class CurrentConditionsDisplay implements Observer, DisplayElement { Observable observable;

private float temperature;

private float humidity;

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.getTemperature();

this.humidity = weatherData.getHumidity();

display();

}

}

public void display() {

System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity");

}

}

Test.java(测试)

  • @date 2018年9月20日 对比见精髓: 一,注册和上面的差不多,只不多是接口改成抽象类了 二,主题修改通知观察者
  • 现在观察者已经注册完毕了,现在我们调用主题的实现类里面的参数修改的方法,修改会调用统一定义的方

法(update),

  • 只不过这个时候update的方法不在主题的实现类中了而是在主题的抽象类(父类)中,因为上面对的例子我们是实现的是接口
  • ,而这里我们继承的是抽象类,观察者现在全部都在list中,
  • 所以这个时候我们可以直接调用观察者的统一定义的方法来实现通知观察者的目的了 ,而参数我们可以通过this关键字,
  • 就是主题实现类,把参数传过去了。

    *

    *

  • 1,总上所述就是注册,在主题的list中放入观察者,
  • 2,然后假如主题发生变化,会从list中取出观察者并根据统一定义的方法(update)来通知观察者。

    */

    public class Test {

    @SuppressWarnings("unused")

    public static void main(String[] args) {

    WeatherData weatherData = new WeatherData();

    // 这里是依赖者

    // 这一行相当于注册,通过构造方法

    CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData);

    /*

  • 建立三个布告板,并把WeatherData对象传给它们。

    */

    // 主题变化,weatherData变化通知CurrentConditionsDisplay,StatisticsDisplay,ForecastDisplay发生变化

    weatherData.setMeasurements(80, 65, 30.4f);

    weatherData.setMeasurements(82, 70, 29.2f); weatherData.setMeasurements(78, 90, 29.2f);

    }

    }

其它的类都由jar包给实现类的。

原文地址:https://www.cnblogs.com/qingruihappy/p/9693367.html

时间: 2024-10-04 14:31:21

设计模式(3)------观察者设计模式(jdk自带)的相关文章

圣思园java se培训总结(78-)(swing的设计模式,观察者设计模式)

BorderLayout分东西南北中,默认是Frame的布局 FlowLayout是Panel的默认布局 GridLayout是网格布局!实例化一个网格布局对象时可以指定网格数量 panel必须添加到某个容器中才能显示! 事件是描述发生了什么的对象,这些对象是AWT提供好的,例如左键击单击会产生一个ActionEvent对象 事件源是发生这个事件的某个组件,例如单击某个按钮,这个按钮就是事件源 事件处理器 就是一个接收事件,处理事件的方法,用户自己写的! 单击一个按钮就会产生一个事件 (Acti

观察者设计模式

/** * 事件接口即被观察者 * * @author Host * */ publicinterface Event { void attach(Listener listener); void detach(Listener listener); void notifyListener(); } /** * 事件监听者观察者 * * @author Host * */ publicinterface Listener { void execute(); } 事件源的一个实现类(磁盘事件) p

(java)从零开始之--观察者设计模式Observer

观察者设计模式:时当一个对象发生指定的动作时,要通过另外的对象做出相应的处理. 步骤: 1. A对象发生指定的动作是,要通知B,C,D...对象做出相应的处理,这时候应该把B,C,D...对象针对A对象的动作做出的相应处理方法定义在接口上(这是一种规范,凡事需要A对象通知的对象,都要实现该接口). 2. 在A对象维护接口的引用,当A对象发生指定的动作这时候即可调用接口中的方法. 观察者模式的应用场景: 1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变. 2.对象仅需要

监听器和 利 用观察者设计模式设计一个程序

一.监听器概念 1.事件源:发生事件的对象. 2.监听器:是一个接口,监听事件源上要发生的动作 3.事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象 二.Servlet中提供的监听器(8个) 八个监听器分类: 2.1监听ServletContext.HttpSession.ServletRequest对象的创建和销毁的监听器. ServletContextListener:监听ServletContext对象的创建和销毁. HttpSessionListener:监听Htt

观察者设计模式 Vs 事件委托(java)

观察者设计模式 Vs 事件委托 转载请注明原博客地址: http://blog.csdn.net/gdutxiaoxu/article/details/51824769 源码下载地址: http://download.csdn.net/detail/gdutxiaoxu/9567209 本篇博客主要讲解一下几个问题 什么是观察者模式 观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式 简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察

C++设计模式实现--观察者

概述 在软件构建过程中,我们需要为某些对象建立一种"通知依赖关系" --一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化.使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系.从而实现软件体系结构的松耦合.     意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新.[GOF <设计模式>]  特点: 1.  Subj

设计模式: 自己手动实现一个观察者设计模式

观察者模式: 定义了对象之间的一对多依赖,这样一来.当一个对象(被观察者)改变状态时,它的全部依赖者(观察者)都会收到通知并自己主动更新. 在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型. 用这个模式, 你能够改变依赖主题状态的对象.却不必改变主题.这叫提前规划. 主题和观察者都使用接口:观察者利用主题的接口向主题注冊.而主题利用观察者的接口通知观察者.这样能够让两者之间运作正常,有同一时候具有松耦合的长处. 观察者模式利用"组合"将很多观察者组合进主题中.对象之间的这样

JS观察者设计模式:实现iframe之间快捷通信

观察者设计模式又称订阅发布模式,在JS中我们习惯叫做广播模式,当多个对象监听一个通道时,只要发布者向该通道发布命令,订阅者都可以收到该命令,然后执行响应的逻辑.今天我们要实现的就是通过观察者设计模式,实现iframe之间的通信. 一.top对象 一般的JS书里都会在讲框架集的时候讲top,这会让人误解,认为top对象只是代表框架集,其实top的含义应该是说浏览器直接包含的那一个页面对象,也就是说如果你有一个页面被其他页面以iframe的方式包含了,无论包含的层级是什么,都可以用top访问最外层的

设计模式之二---观察者设计模式

观察者设计模式 观察者模式定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式的结构 抽象主题角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者.抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色. 具体主题角色:将有关状态存入具体观察者对象:在具体主题的内部状态改变时,给所有登记过的观察者发出通知.具体主题角色