C++设计模式之观察者模式(设计模式之观察者模式(Observer))
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在
邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者(Listener)也是这种
关系,Observer将自己attach到Listener中,当Listener触发时Notify所有Observer.
作用作用
在观察者模式中,被观察者维护观察者对象的集合,当被观察者对象变化时,它会通知观察者。观察者模式主要是用于解决对
象之间一对多的关系。
类视图
实现实现
class Observer
{
public:
virtual ~Observer() {};
virtual void Update(const std::string &msg)= 0;
protected:
Observer(){};
};
class Listener
{
public:
virtual ~Listener() {};
void attach(Observer* obsvr)
{
m_observers.push_back(obsvr);
}
void remove(Observer* obsvr)
{
m_observers.remove(obsvr);
}
void notify(const std::string &msg)
{
list<Observer*>::iterator iter = m_observers.begin();
for(; iter != m_observers.end(); iter++)
(*iter)->Update(msg);
}
private:
list<Observer* > m_observers; //观察者链表
};
class logRunner : public Listener
{
public:
virtual ~logRunner(){};
void addmsg(const std::string &msg)
{
nofity(msg);
}
}
class logGui : public Observer