patrón de diseño (2) - modo de observador

Observadores modelo (observador) define las dependencias entre los muchos objetos, de modo que, cuando un objeto cambia de estado, todos sus dependientes será notificado y actualiza automáticamente.

El patrón de observador es algo similar al principio de suscripciones a periódicos y revistas.

  1. El negocio de los periódicos es la edición de periódicos
  2. Suscribirse al periódico a un periódico, siempre y cuando tengan una nueva edición de periódicos, que será enviado a usted. Como siempre y cuando estén sus suscriptores, usted siempre recibirá un nuevo periódico.
  3. Cuando no se desea buscar en el periódico cuando darse de baja, no estarían enviando un nuevo periódico.
  4. Mientras el diario sigue funcionando, habría sido una persona (o unidad) para cancelar sus suscripciones a periódicos o suscripciones a periódicos.

Que es equivalente a los temas de modo editor de observación (el observado), el abonado es un observador.

El siguiente ejemplo se explica adicionalmente mediante un modo de espectador. Se utilizó un código para simular sistema de estaciones de observación meteorológica, este sistema es parte de tres estaciones meteorológicas (datos del tiempo adquirieron dispositivo físico real), el objeto de la WeatherData (seguimiento de los datos de las estaciones meteorológicas, y actualiza los tablones de anuncios) y el letrero (Mostrar presentación de tiempo actual para el usuario). Utilizar el incorporado en el modo observador de Java API, que es ser una clase WeatherData observador, que se extiende desde java.util.Observablela clase

import java.util.Observable;

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

    public WeatherData() {}

    public void measurementsChanged() {
        setChanged();
        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;
    }
}

El observador tablón de anuncios, que implementa la java.util.Observerinterfaz.

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

/** * Created by CrowHawk on 17/7/9. */
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");
    }
}

La figura clase patrón de observador como sigue:

El patrón de observador refleja la cuarta principios de diseño: el diseño de la interacción de acoplamiento flexible entre los objetos y el trabajo . Podemos reutilizar el tema de forma independiente y observador, cambiar el tema o el observador partido que no afectará a la otra. Debido a que los dos están débilmente acoplados, siempre y cuando todavía se observa la interfaz entre ellos, somos libres para cambiarlos. La razón por la cual el diseño de acoplamiento flexible nos permite construir sistemas OO flexible que pueda responder al cambio, debido a la interdependencia entre los objetos a un mínimo.

Publicados 295 artículos originales · ganado elogios 37 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/tianshan2010/article/details/104705927
Recomendado
Clasificación