观察者模式java

根据HeadFirst做出实现如下

主题,观察者,显示三个接口。

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 notifyObserver();
}
public interface DisplayElement {
	public void display();
}

气象数据实现主题接口

public class Weather implements Subject {
	private ArrayList<Observer> observer;
	private float pressure;
	private float humidity;
	private float temp;

	public Weather() {
		observer = new ArrayList<Observer>();
	}

	@Override
	public void registerObserver(Observer o) {
		observer.add(o);

	}

	@Override
	public void removeObserver(Observer o) {
		int i = observer.indexOf(o);
		if (i >= 0)
			observer.remove(i);
	}

	@Override
	public void notifyObserver() {
		for (int i = 0; i < observer.size(); i++) {
			observer.get(i).update(temp, humidity, pressure);
		}
	}

	public void measurementChanged() {
		notifyObserver();
	}

	public void setMeasurement(float temp, float humidity, float pressure) {
		this.temp = temp;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementChanged();
	}

}

有了气象之后,显示到布告板,实现了观察者以及显示    接口

public class CurrentConditionDisplay implements Observer, DisplayElement {
	private float temp;
	private float humidity;
	private Subject weatherData;
	
	public CurrentConditionDisplay(Subject weatherData) {
		super();
		this.weatherData = weatherData;
		weatherData.registerObserver(this);
	}

	@Override
	public void display() {
		System.out.println("Current conditions :"+temp+"F degrees and"+humidity+"%humidity");
	}

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

}

最后测试

public class WeatherStation {

	/**
	 * @author WXQ
	 * @param args
	 */
	public static void main(String[] args) {
		Weather weather = new Weather();
		CurrentConditionDisplay currentcd = new CurrentConditionDisplay(weather);
		weather.setMeasurement(80, 65, 30.4f);
		weather.setMeasurement(82, 63, 23.4f);
		weather.setMeasurement(82, 67, 32.4f);
	}

}

结果显示为

Current conditions :80.0F degrees and65.0%humidity
Current conditions :82.0F degrees and63.0%humidity
Current conditions :82.0F degrees and67.0%humidity


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值