观察者模式

观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

观察者模式_第1张图片


注:注意有一个实现Observer接口的对象列表,可以随时增加观察者。

特别注意具体的观察者必须注册具体主题。

当有新的具体类需要当观察者,所有要做的就是在新的类里实现此观察者接口,然后注册为观察者即可。

设计气象站如下:


注意:

1.在WeatherData中,会用一个链表来存储当前的观测者。

2.在notifyObeservers()中,会将链表中每一个观察者的update调用。

3.measurementsChanged()中会调用notifyObeservers()。

4.布告板实现

class CurrentConditionsDisplay :public Observer, public DisplayElement{
private:
	float temperature;
	float humidity;
	Subject weatherData;
public:
	CurrentConditionsDisplay(Subject weatherData)  //构造器需要weatherData对象作为注册用
	{
		this.weatherData = weatherData;
		weatherData.registerObserver(this);
	}
	void update(float temperature, float humidity, float pressure)
	{
		this.temperature = temperature;
		this.humidity = humidity;
		display();
	}
	void display()
	{
		//
	}
};
5.上面布告板的构造需要具体主题对象。保存该对象的引用的目的是防止以后取消注册时使用。

你可能感兴趣的:(观察者模式)