#include<iostream>
#include<list>
using namespace std;
//抽象观察者类,提供一个更新接口
class Observer
{
public:
virtual void Update(int) = 0;
};
//抽象被观察者类
class Subject
{
public:
virtual void Attach(Observer *) = 0;
virtual void Detach(Observer *) = 0;
virtual void Notify() = 0;
};
//实际的观察者A,信息订阅者,接收信息
class AObserver : public Observer
{
public:
AObserver(){};
void Update(int value)
{
cout<<"实际观察者A收到通知:"<<value<<endl;
}
};
//实际的观察者B,信息订阅者,接收信息
class BObserver : public Observer
{
public:
BObserver(){};
void Update(int value)
{
cout<<"实际观察者B收到通知:"<<value<<endl;
}
};
//实际的被观察者,信息推送者,通知观察者信息已更新
class SomeSubject: public Subject
{
list<Observer*> mObjectList; //存储了所有观察者信息
int mState;
public:
void Attach(Observer *observer)
{
mObjectList.push_back(observer);
}
void Detach(Observer *observer)
{
mObjectList.remove(observer);
}
void SetState(int state)
{
mState = state;
Notify();
}
//信息通知,遍历所有观察者
void Notify()
{
list<Observer*>::iterator it = mObjectList.begin();
for(;it != mObjectList.end();it++)
{
(*it)->Update(mState);
}
}
};
int main()
{
SomeSubject * subjectA = new SomeSubject();
Observer* obsA = new AObserver();
Observer* obsB = new BObserver();
subjectA->Attach(obsA);
subjectA->Attach(obsB);
subjectA->SetState(1);
subjectA->SetState(2);
return 0;
}