用代码和UML图化解设计模式之《观察者模式》
2012-11-02 14:31
579 查看
观察者模式应该说比较简单,就是将不同观察者注册到被观察者内部,被观察者做了什么动作,都会通知到被观察者。。。
代码中,被观察者也可以形成接口,有不同的子类,被观察,更灵活一些。。。
下面代码
// 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
相关文章推荐
- 用代码和UML图化解设计模式之《门面模式》
- 用代码和UML图化解设计模式之《装饰模式》
- 用代码和UML图化解设计模式之《命令模式》
- 用代码和UML图化解设计模式之桥接模式的深入分析
- 用代码和UML图化解设计模式之《适配器模式》
- 用代码和UML图化解设计模式之《模板方法模式》
- 用代码和UML图化解设计模式之《代理模式》
- 用代码和UML图化解设计模式之《抽象工厂模式》
- 用代码和UML图化解设计模式之《责任链模式》
- 用代码和UML图化解设计模式之《桥接模式》
- 用代码和UML图化解设计模式之《迭代器模式》
- 用代码和UML图化解设计模式之《工厂模式》
- 用代码和UML图化解设计模式之《创建者模式》
- 用代码和UML图化解设计模式之《策略模式》
- 设计模式----单例模式UML图和代码实现(C#&JAVA)
- 设计模式-Strategy代码+UML图
- php设计模式之单例模式代码
- JAVA设计模式之工厂模式 代码是原创
- 设计模式与实例代码:单例模式
- 设计模式简单代码之一