00001 #include <list> 00002 using namespace std; 00003 00004 // The Concrete Subject 00005 class ParaWeatherData: public WeatherDataInterface 00006 { 00007 public: 00008 ParaWeatherData() {}; 00009 void SensorDataChange(float a,float b,float c) 00010 { 00011 m_humidity = a; 00012 m_temperature = b; 00013 m_pressure = c; 00014 notifyOb(); 00015 } 00016 00017 void registerOb(ObserverBoardInterface* ob) 00018 { 00019 m_obs.push_back(ob); 00020 } 00021 00022 void removeOb(ObserverBoardInterface* ob) 00023 { 00024 m_obs.remove(ob); 00025 } 00026 protected: 00027 void notifyOb() 00028 { 00029 list<ObserverBoardInterface*>::iterator pos = m_obs.begin(); 00030 while (pos != m_obs.end()) 00031 { 00032 ((ObserverBoardInterface* )(*pos))->update(m_humidity,m_temperature,m_pressure); 00033 (dynamic_cast<DisplayBoardInterface*>(*pos))->show(); 00034 ++pos; 00035 } 00036 } 00037 00038 private: 00039 float m_humidity; 00040 float m_temperature; 00041 float m_pressure; 00042 list<ObserverBoardInterface* > m_obs; 00043 };