00001 // A Concrete Observer 00002 class StatisticBoard : public ObserverBoardInterface, public DisplayBoardInterface 00003 { 00004 public: 00005 StatisticBoard(ParaWeatherData& a):m_maxt(-1000),m_mint(1000),m_avet(0),m_count(0),m_data(a) 00006 { 00007 m_data.registerOb(this); 00008 } 00009 00010 void show() 00011 { 00012 cout<<"________StatisticBoard_________"<<endl; 00013 cout<<"lowest temperature: "<<m_mint<<endl; 00014 cout<<"highest temperature: "<<m_maxt<<endl; 00015 cout<<"average temperature: "<<m_avet<<endl; 00016 cout<<"_______________________________"<<endl; 00017 } 00018 00019 void update(float h, float t, float p) 00020 { 00021 ++m_count; 00022 if (t>m_maxt) 00023 { 00024 m_maxt = t; 00025 } 00026 if (t<m_mint) 00027 { 00028 m_mint = t; 00029 } 00030 m_avet = (m_avet * (m_count-1) + t)/m_count; 00031 } 00032 00033 private: 00034 float m_maxt; 00035 float m_mint; 00036 float m_avet; 00037 int m_count; 00038 ParaWeatherData& m_data; 00039 };