デザインパターン(2) - オブザーバーモード

観察者(観察)モデルは、オブジェクトの状態が変化したときに、その扶養家族のすべてが通知され、自動的に更新され、多くのオブジェクト間の依存関係を定義します。

Observerパターンは、新聞や雑誌へのサブスクリプションの原則に似ています。

  1. 新聞事業は、新聞の発行であります
  2. 新聞に新聞を購読する限り、彼らは新しい新聞の発行を持っているとして、それはあなたに送信されます。限り、あなたは彼らの加入者であるとして、あなたは常に新しい新聞を受け取ることになります。
  3. あなたは新聞を見たくない場合は退会、彼らは新しい新聞を送信することはないだろうというとき。
  4. 限り、新聞はまだ動作するものとして、新聞や新聞の購読へのサブスクリプションをキャンセルするために誰か(または単位)であったであろう。

どの出版社のオブザーバーモードのテーマと等価である(観察)、加入者がオブザーバーです。

以下の実施例は、さらに、ビューアモードによって説明されます。我々は、気象観測局システムをシミュレートするためにコードを使用する、このシステムは、3つの気象局(気象データは、実際の物理デバイスを取得した)の一部である、WeatherData(掲示板を気象局からのデータを追跡し、更新する)と看板のオブジェクト(表示ユーザーへの現在の天気プレゼンテーション)。使用ビルトインから延びオブザーバーWeatherDataクラスであるとされ、観察モードのJava API、java.util.Observableクラス

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;
    }
}

掲示板観察者は、それが実装java.util.Observerインターフェイスを。

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");
    }
}

図オブザーバーパターンのクラス次のように:

:Observerパターンは、第四設計原理を反映しているオブジェクトと仕事の間の疎結合の相互作用を設計します我々は独立して、トピックを再利用し、観察者、他には影響しません対象やオブザーバーのパーティーを変更することができます。2が疎結合されているので、あまりにも長い間、それらの間のインタフェースはまだ観測されたように、我々はそれらを変更するのは自由です。疎結合のデザインは、私たちが原因で最小のオブジェクト間の相互依存関係のため、変化に対応できる柔軟なOOシステムを構築することを可能にする理由。

公開された295元の記事 ウォン称賛37 ビュー30000 +

おすすめ

転載: blog.csdn.net/tianshan2010/article/details/104705927