一、案例背景
贵公司获选为我公司建立下一代Internet气象观测站! 该气象站必须建立在我们专利申请中的WeatherData对象上,由WeatherData对象负责追踪目前的天气状况 (温度、 湿度、气压)。
我们希望贵公司能建立一个应用,有三种布告板,分别显示目前的状况、气象统计及简单的预报。 当WeatherObject对象获得最新的测量数据时, 三种布告板 必须实时更新。 而且,这是一个可以扩展的气象站,Weather -0-Rama气象 站希望公布 一组API,好让其他开发人员可以写出自己的 气象布告板,并插入此应用中。我们希望贵公司能提供这样的API。
二、案例分析
这是一种很常见的场景。WeatherObject对象相当于一个主题,管理了三个对象:温度、 湿度、气压。三种布告板需要订阅这个主题,以便拿到最新的数据并显示。
实现这些并不难,难的是你要未雨绸缪般预料到将来你的工作将会发生什么样的变化,好让自己在这些变化来临时,快速的去响应变化,从而少加点班。
你的工作是为对方设计良好的接口,在这里我们假设甲方提供的信息种类是固定的,你只需要审视自己负责的部分工作即可。首先,显而易见,主题的数量有可能发生变化:减少或增加。其次,甲方提供的信息是固定的,但是内容的表现形式也有可能变化。
三、代码实现
这里给出相关案例的C++代码实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//@brief: 观察者(抽象接口)
class Obser