C语言和设计模式(观察者模式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
观察者模式可能是我们在软件开发中使用得比较多的一种设计模式。为什么这么说?大家可以听我一一到来。我们知道,在windows的软件中,所有的界都是由窗口构成的。对话框是窗口,菜单是窗口,工具栏也是窗口。那么这些窗口,在很多情况下要对一些共有的信息进行处理。比如说,窗口的放大,窗口的减小等等。面对这一情况,观察者模式就是不错的一个选择。
首先,我们可以对这些共有的object进行提炼。
typedef struct _Object
{observer* pObserverList[MAX_BINDING_NUMBER];int number;void (*notify)(struct _Object* pObject);void (*add_observer)(observer* pObserver);void (*del_observer)(observer* pObserver);}Object;
其实,我们需要定义的就是观察者本身了。就像我们前面说的一样,观察者可以是菜单、工具栏或者是子窗口等等。
typedef struct _Observer
{Object* pObject;void (*update)(struct _Observer* pObserver);
}Observer;
紧接着,我们要做的就是在Observer创建的时候,把observer自身绑定到Object上面。
void bind_observer_to_object(Observer* pObserver, Object* pObject)
{assert(NULL != pObserver && NULL != pObject);pObserver->pObject = pObject;pObject->add_observer(pObserver);
} void unbind_observer_from_object(Observer* pObserver, Object* pObject)
{assert(NULL != pObserver && NULL != pObject);pObject->del_observer(observer* pObserver);memset(pObserver, 0, sizeof(Observer));
}
既然Observer在创建的时候就把自己绑定在某一个具体的Object上面,那么Object发生改变的时候,统一更新操作就是一件很容易的事情了。
void notify(struct _Object* pObject)
{Obserer* pObserver;int index;assert(NULL != pObject);for(index = 0; index < pObject->number; index++){pObserver = pObjecet->pObserverList[index];pObserver->update(pObserver);}
}
C语言和设计模式(观察者模式)相关推荐
- 设计模式 | 观察者模式及典型应用
本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托 ...
- 【设计模式】的C语言的设计模式及其应用
转自https://blog.csdn.net/devcloud/article/details/95615621 [摘要] 软件编写模式是开发过程中的重要经验总结.灵活运用设计模式,一方面利于我们编 ...
- C语言和设计模式大全(附代码示例)
文章目录 C语言和设计模式(之单件模式) C语言和设计模式(之原型模式) C语言和设计模式(之组合模式) C语言和设计模式(之模板模式) C语言和设计模式(工厂模式) C语言和设计模式(责任链模式) ...
- 设计模式●观察者模式
设计模式●观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅( ...
- 设计模式——观察者模式
观察者模式是设计模式中的"超级模式",其应用随处可见. "红灯停,绿灯行",在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通.当红灯亮起,来往 ...
- 设计模式-观察者模式(Observer)-Java
设计模式-观察者模式(Observer)-Java 目录 文章目录 1.前言 2.示例案例-多人联机对战游戏的设计 3.观察者模式概述 3.1.观察者模式定义 3.2.观察者模式结构 3.3.观察者模 ...
- Python设计模式-观察者模式
Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
原文:[Head First设计模式]山西面馆中的设计模式--观察者模式 系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- 【学习笔记】ABAP OOD设计模式 - 观察者模式
ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...
最新文章
- 前端笔记之NodeJS(三)Expressejs模板引擎请求识别
- 依赖注入Dagger2详解
- Java并发编程(5):volatile变量修饰符—意料之外的问题(含代码)
- phpgif图片包_php生成动态验证码gif图片
- CentOS6.3 重启后/etc/resolv.conf 被还原解决办法
- Linux_linux常用工具之make/makefile详解
- Block的引用循环问题 (ARC non-ARC)
- 实用的无锁队列(一)
- Linux查看端口被那个进程占用
- usb audio -- 异步方式介绍(1)
- [禅悟人生]先将小事做好再来修禅心
- 软件著作权申请步骤流程
- f检验matlab计算,F检验(F-Test)计算公式与在线计算器_三贝计算网_23bei.com
- 武汉理工计算机网络教学平台,武汉理工大学 操作系统
- Pixracer V1.0编译固件
- web(vue) 简单使用 mixpanel 网页埋点
- MATLAB---读取STL文件并解析
- Django-实现分页
- 用java编写数组最小公倍数_java求多个数字的最小公倍数
- 外贸客户管理软件对传统CRM的颠覆