设计模式——观察者模式_Observer Pattern

来源:互联网 发布:java实现记事本功能 编辑:程序博客网 时间:2024/05/21 11:17

观察者模式

        Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. (定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。)


UML类图



C++代码实现

#include <iostream>#include <list>using namespace std;class Observer {public:virtual void Updata() = 0;};class ConcreteObserverA : public Observer {public:void Updata() { cout << "观察者A已经被通知到更新" << endl; }};class ConcreteObserverB : public Observer {public:void Updata() { cout << "观察者B已经被通知到更新" << endl; }};class Subject {public:virtual void AddObserver(Observer* obs) { _observers.push_back(obs); }virtual void DelObserver(Observer* obs) { if (obs!=NULL)_observers.remove(obs); }virtual void Notify() = 0;protected:list<Observer*> _observers;};class ConcreteSubject : public Subject {public:void Notify() {typedef list<Observer* >::iterator ListIter;for (ListIter iter=_observers.begin(); iter!=_observers.end(); iter++) {(*iter)->Updata();}}void DoSomething() { cout << "被观察者进行了某项操作" << endl; Notify();}};#include "Observer.h"int main(){//观察者ConcreteObserverA* pObserverA = new ConcreteObserverA();ConcreteObserverB* pObserverB = new ConcreteObserverB();//被观察者ConcreteSubject* pSubject = new ConcreteSubject();pSubject->AddObserver(pObserverA);pSubject->AddObserver(pObserverB);pSubject->DoSomething();delete pSubject;delete pObserverB;delete pObserverA;return 0;}

原来所谓的观察行为必须是得到被观察者同意的前提下才能进行。被观察者若是暴露狂则可以引发围观现象。但要是形成广播链的情况处理起来就棘手了,比如观察者同时又是被观察者的双重身份。

原创粉丝点击