设计模式——行为性——观察者模式
2013-11-29 22:57
316 查看
1、定义:一个对象状态改变时(目标对象),所有依赖他的对象(观察者对象)都需要发生改变。
示例:有一个Sender类,负责数据的发送,Display类和Media类都需要调用Sender类中的方法进行数据发送,当网络连接断开时,需要通知Display和Media类停止数据发送。
紧耦合设计:
采用观察者模式的松耦合设计
示例:有一个Sender类,负责数据的发送,Display类和Media类都需要调用Sender类中的方法进行数据发送,当网络连接断开时,需要通知Display和Media类停止数据发送。
紧耦合设计:
#include<iostream> #include <list> using namespace std; class Display { public: void SendData() { cout<<"Send Display Data"<<endl; } void NotifyNetError() { cout<<"Display Recieve Net Error!!"<<endl; } }; class MultiMedia { public: void SendData() { cout<<"Send MultiMedia Data"<<endl; } void NotifyNetError() { cout<<"MultiMedia Recieve Net Error!!"<<endl; } }; class Socket { public: Socket(Display* disp,MultiMedia* media) //紧耦合设计,依赖具体实现细节 { display_module = disp; media_module = media; } void Notify() //当网络异常时,通知Display和media { display_module->NotifyNetError(); //紧耦合设计,当再增加一个模块时,需要更改这里。 media_module->NotifyNetError(); } private: Display* display_module; //依赖具体实现细节 MultiMedia* media_module; }; #include "Test.h" int main() { Display* disp = new Display; MultiMedia* mulit = new MultiMedia; Socket* senddata = new Socket(disp,mulit); senddata->Notify(); return 0; }
采用观察者模式的松耦合设计
#include<iostream> #include <list> using namespace std; class Observer { public: virtual void NotifyNetError() = 0; }; class Display:public Observer { public: void SendData() { cout<<"Send Display Data"<<endl; } void NotifyNetError() { cout<<"Display Recieve Net Error!!"<<endl; } }; class MultiMedia:public Observer { public: void SendData() { cout<<"Send MultiMedia Data"<<endl; } void NotifyNetError() { cout<<"MultiMedia Recieve Net Error!!"<<endl; } }; class Socket { public: Socket() { } void AddModule(Observer* module) { Modulelist.push_back(module); } void Notify() { for (list<Observer*>::iterator it= Modulelist.begin();it!=Modulelist.end();++it) { (*it)->NotifyNetError(); } } private: list<Observer*> Modulelist; //解耦设计,依赖接口而不依赖具体实现。 }; #include "Test.h" int main() { Observer* disp = new Display; Observer* mulit = new MultiMedia; Socket* senddata = new Socket; senddata->AddModule(disp); senddata->AddModule(mulit); senddata->Notify(); return 0; }
相关文章推荐
- 设计模式:观察者模式
- 设计模式(8):观察者模式 Observer
- [设计模式]观察者模式
- 设计模式C++实现十:观察者模式
- 23种设计模式之观察者模式
- 设计模式之观察者(Observer)模式与其C++通用实现(下)
- 设计模式—观察者模式
- 设计模式之观察者模式
- 设计模式--职责链模式观察者模式
- Java设计模式--观察者模式【Observer Pattern】
- 设计模式_观察者模式
- 设计模式--观察者模式
- 观察者设计模式(observer)
- 《Java编程思想第四版》第 16 章 设计范式-提到观察者模式
- Android设计模式之观察者模式
- 设计模式——观察者模式
- 设计模式之四观察者模式
- 设计模式--观察者模式
- Android设计模式之(11)----观察者模式