设计模式——观察者模式_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;}
原来所谓的观察行为必须是得到被观察者同意的前提下才能进行。被观察者若是暴露狂则可以引发围观现象。但要是形成广播链的情况处理起来就棘手了,比如观察者同时又是被观察者的双重身份。
- 设计模式——观察者模式_Observer Pattern
- java设计模式进阶_observer
- Head First 设计模式——观察者模式(Observer Pattern)
- C#设计模式——观察者模式(Observer Pattern)
- 设计模式——观察者模式(Observer Pattern)
- 设计模式(17)——观察者模式(Observer Pattern)
- 设计模式 —— 观察者模式(Observer Pattern)
- java设计模式——观察者模式(Observer Pattern)
- Java设计模式——观察者模式(Observer Pattern)
- 设计模式笔记——(三:观察者模式 Observer Pattern)
- 设计模式——观察者模式(Observer Pattern)
- Java设计模式——观察者模式(Observer Pattern)
- Java设计模式—观察者模式(Observer pattern)
- 设计模式—观察者模式(Observer Pattern)
- 设计模式学习—观察者模式(Observer Design Pattern)
- 学习设计模式(四)_observer
- 观察者设计模式(Observer Pattern)
- 设计模式—观察者模式
- 数据库设计--ER图
- 关于linphone
- 在dreamwaver中显示struts标签
- c语言面试精华版(1)
- 仅 主题为“halo”的类型“mx.containers.VBox”支持样式“backgroundImage”
- 设计模式——观察者模式_Observer Pattern
- C 结构体内存对齐原则
- XCode4.2中使用Empty Application模板替代旧的Window Based Application
- Servlet生命周期与工作原理
- 在C++中模拟委托事件的方法(三)
- C#委托及事件
- 好友silverlight学习网
- Tomcat安装CA证书(详细过程篇)
- Javascript中void是一个操作符