【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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语言和设计模式(观察者模式)相关推荐

  1. 设计模式 | 观察者模式及典型应用

    本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托 ...

  2. 【设计模式】的C语言的设计模式及其应用

    转自https://blog.csdn.net/devcloud/article/details/95615621 [摘要] 软件编写模式是开发过程中的重要经验总结.灵活运用设计模式,一方面利于我们编 ...

  3. C语言和设计模式大全(附代码示例)

    文章目录 C语言和设计模式(之单件模式) C语言和设计模式(之原型模式) C语言和设计模式(之组合模式) C语言和设计模式(之模板模式) C语言和设计模式(工厂模式) C语言和设计模式(责任链模式) ...

  4. 设计模式●观察者模式

    设计模式●观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅( ...

  5. 设计模式——观察者模式

    观察者模式是设计模式中的"超级模式",其应用随处可见. "红灯停,绿灯行",在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通.当红灯亮起,来往 ...

  6. 设计模式-观察者模式(Observer)-Java

    设计模式-观察者模式(Observer)-Java 目录 文章目录 1.前言 2.示例案例-多人联机对战游戏的设计 3.观察者模式概述 3.1.观察者模式定义 3.2.观察者模式结构 3.3.观察者模 ...

  7. Python设计模式-观察者模式

    Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...

  8. [Head First设计模式]山西面馆中的设计模式——观察者模式

    原文:[Head First设计模式]山西面馆中的设计模式--观察者模式 系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也 ...

  9. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  10. 【学习笔记】ABAP OOD设计模式 - 观察者模式

    ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...

最新文章

  1. 前端笔记之NodeJS(三)Expressejs模板引擎请求识别
  2. 依赖注入Dagger2详解
  3. Java并发编程(5):volatile变量修饰符—意料之外的问题(含代码)
  4. phpgif图片包_php生成动态验证码gif图片
  5. CentOS6.3 重启后/etc/resolv.conf 被还原解决办法
  6. Linux_linux常用工具之make/makefile详解
  7. Block的引用循环问题 (ARC non-ARC)
  8. 实用的无锁队列(一)
  9. Linux查看端口被那个进程占用
  10. usb audio -- 异步方式介绍(1)
  11. [禅悟人生]先将小事做好再来修禅心
  12. 软件著作权申请步骤流程
  13. f检验matlab计算,F检验(F-Test)计算公式与在线计算器_三贝计算网_23bei.com
  14. 武汉理工计算机网络教学平台,武汉理工大学 操作系统
  15. Pixracer V1.0编译固件
  16. web(vue) 简单使用 mixpanel 网页埋点
  17. MATLAB---读取STL文件并解析
  18. Django-实现分页
  19. 用java编写数组最小公倍数_java求多个数字的最小公倍数
  20. 外贸客户管理软件对传统CRM的颠覆

热门文章

  1. java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
  2. shell下如何删除文件的某一列
  3. Uva 437 - The Tower of Babylon(DP)
  4. jQery 操作CSS
  5. 长串英文数字强制折行解决办法css
  6. HDU 1533 二分图最小权匹配 Going Home
  7. xib加载的两种方式
  8. centOS restart xinetd
  9. MFC初探 —— 捕获键盘消息
  10. 算法(二):分而治之