使用场景:对象存在一对多的情况时,比如某个对象的改变,需要通知依赖他的所有对象
被观察者(Subect):改变时通知所有观察者,包含观察者的合集
观察者(Observer):抽象类
具体的观察者(ConcreteObserver):继承Observer
class Subject
{
public:
void Attach(Observer* p) { m_vcObs.push_back(p); }
void Detach(Observer* p)
{
for (int i=0; i<m_vcObs.size();i++)
{
if (p == m_vcObs[i])
{ m_vcObs.erase(m_vcObs.begin()+i); break; }
}
}
void Notify()
{
for (int i=0; i<m_vcObs.size();i++)
m_vcObs[i]->Update();
}
private:
vector<Observer*> m_vcObs;
};
class Observer
{
public:
virtual void Update() = 0;
};
class ConcreteObserverA : public Observer
{
public
void Update() { cout << "update A"; }
}
class ConcreteObserverB : public Observer
{
public
void Update() { cout << "update B"; }
}