傍観者モード-(1)


傍観者モードとは?

  • のオブジェクト状態の変化を観察する観察者は、変化が発生するたびに、方法によりオブジェクトリストのパターン
  • を直接通知する.

    こうぞう


  • 各上位機はObserver,Subjectインタフェースからなる.
  • Observerは各光ファイバの更新方式を記述し、
  • Subjectには、データを持つオブジェクトが登録されてオブジェクトが削除され、オブジェクト内部の値が変化した場合に通知される方法があります.
  • notifyObservers()メソッドから見ると,各訪問者に通知する方法が用いられる.
  • package ObserverPattern.Interface;
    
    public interface Observer {
        public void update(float temp, float humidity, float pressure);
    }
    package ObserverPattern.Interface;
    
    public interface Subject {
        public void registerObserver(Observer o);
        public void removeObserver(Observer o);
        public void notifyObservers();
    }
  • の2つのインタフェースは、各ファイバの状態を更新し、ファイバを登録し、削除する動作を記述する.
  • package ObserverPattern;
    
    import ObserverPattern.Interface.Observer;
    import ObserverPattern.Interface.Subject;
    
    import java.util.ArrayList;
    
    public class WeatherData implements Subject {
        private ArrayList observers;
        private float temperature;
        private float humidity;
        private float pressure;
    
        public WeatherData() {
            observers = new ArrayList();
        }
        @Override
        public void registerObserver(Observer o) {
            observers.add(o);
        }
    
        @Override
        public void removeObserver(Observer o) {
            int i = observers.indexOf(o);
            if (i >= 0) {
                observers.remove(i);
            }
        }
    
        @Override
        public void notifyObservers() {
            for (int i=0; i < observers.size(); i++) {
                Observer observer = (Observer) observers.get(i);
                observer.update(temperature,humidity,pressure);
            }
        }
    
        public void measurementsChanged() {
            notifyObservers();
        }
    
        public void setMeasurements(float temperature, float humidity, float pressure) {
            this.temperature = temperature;
            this.humidity = humidity;
            this.pressure = pressure;
            measurementsChanged();
        }
    }
  • の傍観者を管理し、オブジェクトのオブジェクトを作成および管理します.傍観者はリストとして追加および管理を行う.
  • とnotifyObservers法を用いて,傍観者を格納するリストをループする.
    各オプティカル(光学式)ドライブに内蔵されたupdateメソッドを使用すると、オプティカル(光学式)ドライブで観察できます.
  • package ObserverPattern.Display;
    
    import ObserverPattern.Interface.DisplayElement;
    import ObserverPattern.Interface.Observer;
    import ObserverPattern.Interface.Subject;
    
    public class CurrentConditionsDisplay implements Observer, DisplayElement {
        private float temperature;
        private float humidity;
        private Subject weatherData;
    
        public CurrentConditionsDisplay(Subject weatherData) {
            this.weatherData = weatherData;
            weatherData.registerObserver(this);
        }
    
        @Override
        public void display() {
            System.out.println("Current conditions: " + temperature + "F Degrees and " + humidity + "% humidity");
        }
    
        @Override
        public void update(float temp, float humidity, float pressure) {
            this.temperature = temp;
            this.humidity = humidity;
            display();
        }
    }
    package ObserverPattern;
    
    import ObserverPattern.Display.CurrentConditionsDisplay;
    
    public class WeatherStation {
        public static void main(String[] args) {
            WeatherData weatherData = new WeatherData();
    
            CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
    
            weatherData.setMeasurements(80,65,30.4f);
            weatherData.setMeasurements(82,70,29.2f);
        }
    }
  • このようにして値を受信するオブジェクトWeatherDataオブジェクトの場合、setMeasurementメソッド
    傍観者に更新した値を送信しますか?提供された機能も実行されます.