設計模式----觀察者模式

觀察者模式 定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。

(註冊、移除)

類圖:





接口:

public interface Subject {

	public void registerObserver(Object o);
	public void removeObserver(Object o);
	public void notifyObservers();
}


public interface Observer {
	public void update(float temp, float humidity, float pressure);
}


public interface DisplayElement {
	public void display();
}

類:

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(Object o) {
		observers.add(o);
	}

	@Override
	public void removeObserver(Object o) {
		int i = observers.indexOf(o);
		if (i >= 0){
			observers.remove(o);
		}
	}
	@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 measurementsChanges(){
		notifyObservers();
	}
	public void setMeasurements(float temperature, float humidity, float pressure){
		this.humidity    = humidity;
		this.temperature = temperature;
		this.pressure    = pressure;
		measurementsChanges();
	}
	//其他方法....
}


public class CurrentConditionDisplay implements Observer, DisplayElement {

	private float temperature;
	private float humidity;
	private WeatherData weatherData;
	
	public CurrentConditionDisplay(WeatherData w){
		this.weatherData = w;
	}
	@Override
	public void display() {
		System.out.println("Current condition: " + temperature + ", " + humidity);
	}

	@Override
	public void update(float temp, float humidity, float pressure) {
		this.temperature = temp;
		this.humidity = humidity;
		display();
	}

}

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