观察者模式定义了一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新,松耦合。本质上是一种发布订阅的模型。
代码如下
#include <list>
#include <iostream>
using namespace std;
class IObserver
{
public:
virtual void update(string) = 0;
};
class ISubject
{
public:
virtual void addObserver(IObserver*) = 0;
virtual void removeObserver(IObserver*) = 0;
virtual void notify(string) = 0;
};
class Subject :public ISubject
{
public:
void addObserver(IObserver* observer)
{
m_observers.push_back(observer);
}
void removeObserver(IObserver* observer)
{
m_observers.remove(observer);
}
void notify(string message)
{
list<IObserver*>::iterator iter = m_observers.begin();
for (; iter != m_observers.end(); iter++)
{
(*iter)->update(message);
}
}
private:
list<IObserver*> m_observers;
string m_message;
};
class Observer :public IObserver
{
public:
Observer(int index, ISubject *sub):m_index(index),m_sub(sub)
{
m_sub->addObserver(this);
}
void update(string message)
{
cout << "I am Observer "<<m_index<<". "<< message.c_str()<<endl;
}
private:
int m_index;
ISubject *m_sub;
};
int main()
{
ISubject* sub = new Subject();
IObserver* ob1 = new Observer(1, sub);
IObserver* ob2 = new Observer(2, sub);
string message = "OK!";
sub->notify(message);
getchar();
}