观察者模式

来源:互联网 发布:java信贷项目 编辑:程序博客网 时间:2024/06/05 17:32
#pragma  once#include <Windows.h>#include <iostream>#include <vector>using namespace std;/*观察者模式(适合设计一个事件触发处理机制的功能)(1)定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。其实质是被观察者类中关联一下观察者类,并且在处理一些事情后,遍历观察者类的相关的方法。角色:(a)被观察者使用Vector容器存放观察者对象attach方法添加观察者对象到容器detach方法从容器删除观察者对象notify方法依次调用观察者对象的对应方法(b)观察者有一个update方法,在被观察者状态发生变化时,这个方法就会被触发调用(c)具体被观察者使用此角色易于扩展,在此角色中定义具体的业务逻辑(d)具体观察者观察者接口的具体实现,定义被观察者对象状态发生改变时所要处理的逻辑*/class Iobserver{public:virtual void update() =0;};class observer1 : public Iobserver{public:virtual void update(){cout<<"观察者1事件发生,并进行消息处理"<<endl;}};class observer2 : public Iobserver{public:virtual void update(){cout<<"观察者2事件发生,并进行消息处理"<<endl;}};//////////////////////////////////////////////////////////////////////////class Iobservable{public:vector<Iobserver*>m_vecObserve;virtual void attachVec(Iobserver* pOb){m_vecObserve.push_back(pOb);}virtual void ClearVec(){m_vecObserve.clear();}virtual void notifyMsg(){for (int i=0;i<m_vecObserve.size();i++){m_vecObserve.at(i)->update();}}public:virtual void doSomething() = 0;};class observable : public Iobservable{virtual void doSomething(){cout<<"被观察者事件发生"<<endl;this->notifyMsg();}};void main(){Iobservable *pIobserable = new observable(); Iobserver *pObserver1 = new observer1;pIobserable->attachVec(pObserver1); Iobserver *pObserver2 = new observer2;pIobserable->attachVec(pObserver2);pIobserable->doSomething();delete pObserver1;delete pObserver2;pIobserable->ClearVec();delete pIobserable;pIobserable = NULL;}

0 0
原创粉丝点击