设计模式——行为性——观察者模式
来源:互联网 发布:淘宝外卖和饿了么合并 编辑:程序博客网 时间:2024/05/18 15:55
1、定义:一个对象状态改变时(目标对象),所有依赖他的对象(观察者对象)都需要发生改变。
示例:有一个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;}
- 设计模式——行为性——观察者模式
- 设计模式——观察者模式(行为型模式)
- 观察者模式——行为型设计模式之五
- java行为设计模式——观察者模式
- 【设计模式】—-(16)观察者模式(行为型)
- 设计模式—行为型-Observer(观察者)
- 【Java设计模式】详解系列 3.1.2行为型模式 : 观察者模式 — 模式详解
- 设计模式—行为模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者
- Keil C51对C语言的关键词扩展之十三: sfr
- 实用正则表达式扫描android SDcard的文件
- SVN学习笔记 .
- js小常识
- 《算法导论》学习
- 设计模式——行为性——观察者模式
- Linux dsh工具安装
- 如何忘却jQuery,开始使用JavaScript原生API
- 常用的时间复杂度排序
- 51单片机的内存优化
- c语言strcmp实现
- 使用js和正则表达式验证邮箱、手机号码、密码等
- 通过dsh批量管理Linux服务器
- codeforce Dima and Guards