用代码和UML图化解设计模式之《观察者模式》

来源:互联网 发布:巨灵财经数据库 编辑:程序博客网 时间:2024/05/29 09:30

 

观察者模式应该说比较简单,就是将不同观察者注册到被观察者内部,被观察者做了什么动作,都会通知到被观察者。。。

 

代码中,被观察者也可以形成接口,有不同的子类,被观察,更灵活一些。。。

 

下面代码

 

// Observer.cpp : 定义控制台应用程序的入口点。//************************************************************************/    /* @filename    Observer.cpp@author       wallwind  @createtime    2012/11/2 23:58@function     观察者模式@email       wochenglin@qq.com  @weibo      @成林有理想*/    /************************************************************************/#include "stdafx.h"#include <iostream>#include <vector>using namespace std;/*观察者*/class IObserver{public:IObserver(){}virtual ~IObserver(){}virtual void update() = 0;};/*观察者1;*/class FirstObserver :public IObserver{public:FirstObserver(){}virtual ~FirstObserver(){}virtual void update(){cout<<"FirstObserver KNOW  OBSERVERABLE DO ACTION" <<endl;}};class SecondObserver :public IObserver{public:SecondObserver(){}virtual ~SecondObserver(){}virtual void update(){cout<<"SecondObserver KNOW  OBSERVERABLE DO ACTION" <<endl;}};/**被观察者*/class Observable{public:Observable(){}~Observable(){}void addObser(IObserver* obser){m_obserSet.push_back(obser);}void removeObser(IObserver* obser){m_obserSet.pop_back();}void doAction(){cout<<"Observable do some action " <<endl;this->notifyAllObser();}void notifyAllObser(){vector< IObserver* > ::iterator iter = m_obserSet.begin();for (;iter !=m_obserSet.end();iter++){(*iter)->update();}}private:vector< IObserver* > m_obserSet;};int _tmain(int argc, _TCHAR* argv[]){IObserver * fober = new FirstObserver();IObserver * sober = new SecondObserver();Observable * oble = new Observable;oble->addObser(fober);oble->addObser(sober);oble->doAction();return 0;}


在类设计上可以更加灵活。

 

更多文章,欢迎访问:http://blog.csdn.net/wallwind

原创粉丝点击