观察者模式又叫发布-订阅模式。下面小编就来介绍下观察者模式。
首先看下观察者模式的uml图:
抽象的观察者实现如下:
classObserver
{
public:
virtualvoidUpdate(int) = 0;
};
主题的接口实现如下:
class Subject
{
public:
virtual void Attach(Observer *) = 0;
virtual void Detach(Observer *) = 0;
virtual void Notify() = 0;
};
对于主题的实现:
class ConcreteSubject: public Subject{
public:
void Attach(Observer* o){ m_list.add(o); }
void Detach(Observer* o){ m_list.remove(o); }
void notify()
{
for_each(m_list.begin(), m_list.end(),[&](Observer *o ){o->update();});
}
int m_state;
private:
std::list
};
对观察者的实现:
class ConcreteObserver: public Subject
{
void update(){ cout << "hehhe"; }
};
对观察者的测试:
int main()
{
ConcreteSubject s;
ConcreteObserver o;
s.Attach(&o);
s.m_state = 1;
s.notify();
s.m_state = 2;
s.notify();
return 1;
}
标签:设计模式,教程,观察者