//观察者模式 begin;
class Observer
{//观察者接口;
public:
virtual void update(int) = 0;
};
class Subject
{//主题接口;
public:
virtual void RegisterObserver(Observer*) = 0;
virtual void RemoveObserver(Observer*) = 0;
virtual void notifyObserver() = 0;
};
class ConcreteSubject:public Subject
{//主题的具体实现类;
public:
virtual void RegisterObserver(Observer* pObserver)
{
m_ObserverList.push_back(pObserver);
}
virtual void RemoveObserver(Observer* pObserver)
{
m_ObserverList.remove(pObserver);
}
virtual void notifyObserver()
{
for (std::list<Observer*>::iterator iter = m_ObserverList.begin();
iter != m_ObserverList.end();
++iter)
{
(*iter)->update(m_iState);
}
}
void SetState(const int state)
{
m_iState = state;
}
private:
std::list<Observer *> m_ObserverList;
int m_iState;
};
//观察者实现类;
class ConcreteObserverOne:public Observer
{
public:
ConcreteObserverOne(Subject *pSubject):m_pSubject(pSubject){}
virtual void update(int value)
{
std::cout << "ConcreteObserverOne get the update. New State:" << value << std::endl;
}
private:
Subject *m_pSubject;
};
class ConcreteObserverTwo :public Observer
{
public:
ConcreteObserverTwo(Subject *pSubject) :m_pSubject(pSubject) {}
virtual void update(int value)
{
std::cout << "ConcreteObserverTwo get the update. New State:" << value << std::endl;
}
private:
Subject *m_pSubject;
};
void Observer_Test()
{ //定义主题对象;
ConcreteSubject *pSubject = new ConcreteSubject();
//定义观察者对象;
Observer *pObserver1 = new ConcreteObserverOne(pSubject);
Observer *pObserver2 = new ConcreteObserverTwo(pSubject);
//向主题注册观察者;
pSubject->RegisterObserver(pObserver1);
pSubject->RegisterObserver(pObserver2);
//设置主题状态;
pSubject->SetState(2);
//更新已经注册的观察者的状态;
pSubject->notifyObserver();
//取消观察者注册;
pSubject->RemoveObserver(pObserver1);
//应该可以实用观察者自己去注册和删除实用m_pSubject成员;
delete pSubject;
delete pObserver1;
delete pObserver2;
}
//观察者模式 end;
观察者模式
最新推荐文章于 2024-09-01 15:47:48 发布