设计模式(2): 观察者模式-1
先看看维基定义:
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相关推荐
- 设计模式:观察者模式--Observer
一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...
- java 观察者模式_图解Java设计模式之观察者模式
图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...
- 游戏服务器架构-设计模式之观察者模式和发布订阅模式真的一样吗?
前面我给大家分享了观察者模式和发布订阅模式,有人私信给我说这俩不是一样嘛,大体没什么区别,我猜测大多数认为这两者是一样的可以继续阅读这两篇文章,如果还不能解答你的问题,我相信这篇文章对比两者的关系会让 ...
- java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...
- 设计模式 C++观察者模式
无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...
- 学习《图说设计模式》观察者模式
图说设计模式之观察者模式 1. 模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一 ...
- 设计模式之观察者模式——猫抓老鼠2
设计模式之观察者模式--猫抓老鼠2: 对猫抓老鼠1再次进行优化,降低代码复杂性,以及使用事件来对方法进行保护 代码优化: 将老鼠代码进行优化,将自己的方法在构造时便注册到猫里面: using Syst ...
- 设计模式之观察者模式——猫抓老鼠1
设计模式之观察者模式--猫抓老鼠: 问题描述: 通过猫抓老鼠的例子进行了解观察者模式,首先的初始代码为(有三个类): using System;/// <summary> /// 观察者设 ...
- 设计模式学习--观察者模式(Observer Pattern)
设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热! 下午15:28 设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一 ...
- 「设计模式(二) - 观察者模式」
「设计模式(二) - 观察者模式」 一.回复TD退订 日常生活中,这种短信无处不在,各种广告,在互联网高速发展的今天,个人信息可以说是透明的.没有任何隐私可言,类似这种通知其实跟我们开发过程使用的观察 ...
最新文章
- Extmail + Postfix on Debian5
- 时间序列(五)股票分析
- 项目前期——用例图、类图、活动图、组件图
- 运行时vs编译时类路径
- 财物机器人英文ppt演讲课件_“如何恰当使用课件动画”
- 【CSS3】填色表格演示hsl()
- leetcode53 python3 96ms 最大子序列和 python解法
- 如何计算边缘计算的成本
- 《Oracle从入门到精通》读书笔记第四章 SQL语言基础之二
- Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 1:解码文件头
- 【渝粤教育】国家开放大学2018年春季 8668-22T汽车涂装技术(A) 参考试题
- 微信小程序地图插件系列(一):微信小程序使用高德地图(不定期更新)
- 《左耳听风》-ARTS-打卡记录-模板
- 中国行政区划编码-省市县镇村
- HaaS EDU场景式应用学习 - 复古八音盒
- js递归处理删除某些节点
- 如何计算乘积 java_Java模拟计算机的整数乘积计算功能示例
- 安装MATLAB时报错:提取错误 安装dsp_doc_en_common时检测到以下错误:某安装路径(指定的路径无效)
- ionic 中的折线图与柱状图
- 计算机毕设项目 python微信公众平台机器人