觀察者模式

觀察者模式

// 佈告板需要顯示時調用display();
public interface DisplayElement {

public void display();

}


//觀察者接口

public interface Observer {

public void update(float temp, float humidity, float pressure);

}


//主題接口

public interface Subject {

public void registerObserver(Observer o);

public void removeObserver(Observer o);

public void notifyObservers();

}


//氣象資料

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

}

//註冊觀察者

public void registerObserver(Observer o) {

observers.add(o);

}

//移除觀察者

public void removeObserver(Observer o) {

int i = observers.indexOf(o);

if (i >= 0) {

observers.remove(i);

}

}

//通知所有觀察者

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

}

}


//目前狀況佈告板

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

}

public void update(float temperature, float humidity, float pressure) {

this.temperature = temperature;

this.humidity = humidity;

display();

}

public void display() {

System.out.println("Current conditions:" + temperature

+ "F degrees and " + humidity + "% humidity");

}

}



//氣象站

public class WeatherStation {

public static void main(String[] args) {

WeatherData weatherData = new WeatherData();

CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(

weatherData);

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

}

}












如果驕傲沒有冷冷拍下,又怎懂得要多努力才走的到遠方,如果夢想不曾墜落懸崖千鈞一髮,又怎曉得執着的人,擁有隱形的翅膀。
                                                                                                                            --------------------------------------------------《最初的夢想》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章