#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;
}
观察者模式
最新推荐文章于 2019-01-13 22:07:59 发布