#include
#include
#include
using namespace std;
class Observer;
class Subject
{
public:
virtual void Attach(Observer* pObj) = 0;
virtual void Change() = 0;
virtual void SetWeather(string str) = 0;
virtual string GetWeather() = 0;
};
class Observer
{
public:
virtual string GetName() = 0;
virtual void Update(Subject* pSub) = 0;
};
class Earth: public Subject
{
public:
Earth()
{
this->m_lsObj.clear();
}
void Attach(Observer* pObj)
{
this->m_lsObj.push_back(pObj);
}
void Change()
{
list Observer* pObj = NULL;
for (it = this->m_lsObj.begin(); it != this->m_lsObj.end(); it++)
{
pObj = (Observer*)(*it);
pObj->Update(this);
}
}
void SetWeather(string str)
{
this->m_strWeather = str;
this->Change();
}
string GetWeather()
{
return this->m_strWeather;
}
private:
string m_strWeather;
list};
class Satellite:public Observer
{
public:
Satellite(string str)
{
this->m_strName = str;
}
string GetName()
{
return this->m_strName;
}
void Update(Subject* pSub)
{
cout <GetName() + " " + pSub->GetWeather() < }
private:
string m_strName;
};
int main()
{
Earth ert;
Satellite s1("风云一号");
Satellite s2("风云二号");
Satellite s3("风云三号");
Satellite s4("风云四号");
Satellite s5("风云五号");
//注册事件
ert.Attach(&s1);
ert.Attach(&s2);
ert.Attach(&s3);
ert.Attach(&s4);
ert.Attach(&s5);
ert.SetWeather("nice day");
return 0;
}