先看看维基定义:

The observer pattern is a softeware desugn pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifes them automatically of any state changes, usually by calling one of their methods. (The observer pattern is also a key part in the familiar model-view-controller(MVC).)

观察者模式:

存在两个对象 ,主题对象观察者对象, 主题对象包含一系列观察者对象。 每当主题的状态改变时,都会通过调用观察者对象中的方法来通知所有观察者对象(MVC 模式中也包含了观察者模式)。

重点: 观察者定义了对象之间的一对多依赖,一个对象改变状态,它的所有的依赖者都会收到通知并自动更新。 在程序设计时, 如果遇到一对多依赖的情况,首先要条件反射的想能否用观察者模式

按照面向接口编程的原则, 存在主题对象观察者对象, 则自然存在抽象主题对象以及抽象观察者对象, 静态类图如下:

以上结构图中角色如下:

  • Subject(抽象主题角色):将所有观察者对象的引用保持在一个列表中,动态的通知观察者对象,并提供增加与删除观察者对象的操作, 一般由抽象类或者接口实现。
  • Observer(抽象观察者对象): 为所有具体观察者定义一个接口,在得到 Subject 通知时更新自己。 一般由抽象类或者接口实现。
  • ConcreteSubject(具体主题角色/具体被观察者角色): 实现抽象主题接口。
  • ConcreteObserver(具体观察者角色); 实现抽象观察者接口, 使自身状态与主题的状态相协调。

在 .net 以及 jave内置了观察者模式 —— 事件。包含事件的类用于发布事件,被称为 发布器(publisher, 对应上文的 主题类), 其他接收该事件的类被称为 订阅器 (subscriber, 对应上文的 抽象观察类),  使用 发布 - 订阅 (publisher - subscriber) 模型。

简化的位置,用 委托以及事件取代 抽象观察者类:

public delegate void  NotifiyEventHandler(Object sender);
// 基于委托定义事件
public Event NotifyEventHandler EventHandler;

转载于:https://www.cnblogs.com/yaolin1228/p/7503070.html

设计模式(2): 观察者模式-1相关推荐

  1. 设计模式:观察者模式--Observer

    一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...

  2. java 观察者模式_图解Java设计模式之观察者模式

    图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...

  3. 游戏服务器架构-设计模式之观察者模式和发布订阅模式真的一样吗?

    前面我给大家分享了观察者模式和发布订阅模式,有人私信给我说这俩不是一样嘛,大体没什么区别,我猜测大多数认为这两者是一样的可以继续阅读这两篇文章,如果还不能解答你的问题,我相信这篇文章对比两者的关系会让 ...

  4. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  5. 设计模式 C++观察者模式

    无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...

  6. 学习《图说设计模式》观察者模式

    图说设计模式之观察者模式 1. 模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一 ...

  7. 设计模式之观察者模式——猫抓老鼠2

    设计模式之观察者模式--猫抓老鼠2: 对猫抓老鼠1再次进行优化,降低代码复杂性,以及使用事件来对方法进行保护 代码优化: 将老鼠代码进行优化,将自己的方法在构造时便注册到猫里面: using Syst ...

  8. 设计模式之观察者模式——猫抓老鼠1

    设计模式之观察者模式--猫抓老鼠: 问题描述: 通过猫抓老鼠的例子进行了解观察者模式,首先的初始代码为(有三个类): using System;/// <summary> /// 观察者设 ...

  9. 设计模式学习--观察者模式(Observer Pattern)

    设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热!  下午15:28  设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一 ...

  10. 「设计模式(二) - 观察者模式」

    「设计模式(二) - 观察者模式」 一.回复TD退订 日常生活中,这种短信无处不在,各种广告,在互联网高速发展的今天,个人信息可以说是透明的.没有任何隐私可言,类似这种通知其实跟我们开发过程使用的观察 ...

最新文章

  1. Extmail + Postfix on Debian5
  2. 时间序列(五)股票分析
  3. 项目前期——用例图、类图、活动图、组件图
  4. 运行时vs编译时类路径
  5. 财物机器人英文ppt演讲课件_“如何恰当使用课件动画”
  6. 【CSS3】填色表格演示hsl()
  7. leetcode53 python3 96ms 最大子序列和 python解法
  8. 如何计算边缘计算的成本
  9. 《Oracle从入门到精通》读书笔记第四章 SQL语言基础之二
  10. Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 1:解码文件头
  11. 【渝粤教育】国家开放大学2018年春季 8668-22T汽车涂装技术(A) 参考试题
  12. 微信小程序地图插件系列(一):微信小程序使用高德地图(不定期更新)
  13. 《左耳听风》-ARTS-打卡记录-模板
  14. 中国行政区划编码-省市县镇村
  15. HaaS EDU场景式应用学习 - 复古八音盒
  16. js递归处理删除某些节点
  17. 如何计算乘积 java_Java模拟计算机的整数乘积计算功能示例
  18. 安装MATLAB时报错:提取错误 安装dsp_doc_en_common时检测到以下错误:某安装路径(指定的路径无效)
  19. ionic 中的折线图与柱状图
  20. 计算机毕设项目 python微信公众平台机器人

热门文章

  1. springboot_4 spring boot 使用servlet,filter,listener和interceptor
  2. Linux虚拟机ip为127.0.0.1的处理
  3. HDU 1241 Oil Deposits
  4. 随笔--2011.12.21
  5. 今夜,我又坐在电脑面前想你
  6. HTTPS访问站点,出现证书问题解决
  7. 系统服务器端口怎么关闭了,如何关闭云服务器端口号
  8. nor flash 和nand flash 的区别
  9. springmvc的异步处理
  10. abstract不能和哪些关键字共存 学习