zoukankan      html  css  js  c++  java
  • 设计模式学习笔记观察者模式

    1、概念

    它定义对象之间的许多依赖,象(主题对象)的状态改变时,它的全部依赖者(观察者对象)都会收到通知并自己主动更新。

     

    2、优势

    观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需改动主题对象的代码。仅仅须要新的观察者对象实现接口。在程序执行的过程中,能够随时注冊和删除观察者而不影响主体对象。

     
    观察者模式使主题(Subject)对象和观察者(Observer)对象都能够被轻易地复用。

    3、Java中观察者模式

    Java API有内置的观察者模式,java.util包内包括最主要的Observer接口与Observable类

    实现(源自head first)

    主题对象

    //observeable为Java自带的主题对象。自带addObserver(Observer o),deleteObserver(Observer o),hasChanged() ,notifyObservers(Object arg) 等方法

    public class WeatherData extends Observable {
    private float temperature;
    private float humidity;
    private float pressure;

    public WeatherData() { }

    public void measurementsChanged() {
    setChanged();

    //notifyObservsers方法。假设 hasChanged 方法指示对象已改变,则通知其全部观察者(调用观察者的update方法)
    notifyObservers();
    }

    public void setMeasurements(float temperature, float humidity, float pressure) {
    this.temperature = temperature;
    this.humidity = humidity;
    this.pressure = pressure;
    measurementsChanged();
    }

    public float getTemperature() {
    return temperature;
    }

    public float getHumidity() {
    return humidity;
    }

    public float getPressure() {
    return pressure;
    }
    }

    //观察者对象

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

    public class CurrentConditionsDisplay implements Observer {
    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");
    }
    }

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    unitest 测试集 实例
    python3 设置滚动条
    python3 mail
    wordpress +window 走起~
    获取在线python 文档
    chrome 自动加载flash
    报错 hint: Updates were rejected because the remote contains work that you do 解决方法
    Bitcode
    Autorelease
    atomic
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4713008.html
Copyright © 2011-2022 走看看