设计模式之观察者设计模式(C++实现)

来源:互联网 发布:蒙草堂亚麻籽油淘宝网 编辑:程序博客网 时间:2024/05/17 04:03
观察者模式

观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。


当一件事发生改变,会引起其他事物的改变,可以使用观察者设计模式。


写个简单的例子

下雨了,人需要去避雨,鸟儿会低飞。。。。。

#ifndef _OBSERVE_H_#define _OBSERVE_H_#include <iostream>#include <list>using std::cout;using std::endl;class listener{public:    virtual void Execute() = 0;};class CObserve{public:    void registListener(listener* tmplistener);    void removeListener(listener* tmplistener);    void Execute();private:    std::list<listener*> m_listenerlist;};void CObserve::registListener(listener* tmplistener){    m_listenerlist.push_back(tmplistener);}void CObserve::removeListener(listener* tmplistener){    m_listenerlist.remove(tmplistener);}void CObserve::Execute(){    std::list<listener*>::const_iterator it = m_listenerlist.begin();    while(it != m_listenerlist.end())    {        (*it)->Execute();        it++;    }}class CPeople:public listener{public:    void Execute();};void CPeople::Execute(){    cout<<"下雨了,人们跑去避雨"<<endl;}class CSwallow:public listener{public:    void Execute();};void CSwallow::Execute(){    cout<<"下雨了,燕子低低飞"<<endl;}

#include "Observed.h"int main(){    CObserve observe;    CPeople people;    CSwallow swallow;    observe.registListener(&people);    observe.registListener(&swallow);    observe.Execute();    observe.removeListener(&people);    observe.removeListener(&swallow);    return 0;}

结果:


0 0
原创粉丝点击