目录

文章目录

  • 目录
  • 观察者模式
  • 应用场景
  • 代码示例

观察者模式

观察者模式,必须包含 “观察者” 和 “被观察者” 这两个角色,并且观察者和被观察者之间存在 “观察” 的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。例如:业务数据是被观察者,用户界面是观察者。

实际上,观察者模式大部分都是一对多的关系,可以多个观察者对象同时观察某一个被观察对象。

观察者模式的实现思路是:核心的抽象类用于管理所有依赖它的其他类,当核心类发生变动时,主动通知并更新其他类。

应用场景

  • 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
  • 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
  • 一个对象必须通知其他对象,而并不知道这些对象是谁。
  • 需要在系统中创建一个触发链,A 对象的行为将影响 B 对象,B 对象的行为将影响 C 对象,…。可以使用观察者模式创建一种链式触发机制。<

设计模式 — 行为型模式 — 观察者模式相关推荐

  1. 23种设计模式-行为型模式-观察者模式

    概述 它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多 ...

  2. 设计模式-行为型模式-观察者模式

    观察者模式 观察者模式有时也被称为发布/订阅模式,该模式定义了一种一对多的依赖关系,可以让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化时,通知所有观察者对象,使它们能够自动更新自己. ...

  3. 设计模式-行为型模式-Observer 观察者模式

    设计模式-行为型模式-Observer 观察者模式 1.简介 软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的: 观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对 ...

  4. 设计模式——行为型模式之责任链模式(简简单单入门责任链,理解I/O流消息怎么逐步传递处理以及服务器框架转发)

    文章目录 前言 一.责任链模式定义 二.责任链模式结构 三.责任链高级应用 四.责任链模式优缺点 设计模式系列文章 结尾 前言 作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门 ...

  5. 设计模式— 行为型模式

    关注公众号获取更多资料 设计模式- 行为型模式 ​ 行为型模式描述的死程序运行时复杂的流程控制,描述了多个类或者对象之间怎样相互协调合作,涉及算法与对象之间的职责分配. ​ 行为型模式是23中设计模式 ...

  6. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  7. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  8. 设计模式-行为型模式-中介者模式

    设计模式-行为型模式-中介者模式 行为型模式 划分类和对象的职责. 中介者模式 进销存管理,即采购,销售,库存. 其中类图 代码如下 public class Purchase {// 采购IBM电脑 ...

  9. 设计模式-行为型模式-责任链模式

    设计模式-行为型模式-责任链模式 定义 将请求沿着链传递,然后直到对象处理即可. UML图 代码 基本的责任链 public class Test{public void test(int i, Re ...

最新文章

  1. 史上最快! 10小时大数据入门实战(五)-分布式计算框架MapReduce
  2. C#操作SqlServer数据库的常用对象,及其方法
  3. python物性库能调用哪些物质_Python获取热物性(2)使用ctREFPROP调用refprop
  4. Java并发编程:volatile关键字解析(转载)
  5. 密码可见_无密码身份认证即将来临
  6. Arch Linux 服务器,Arch Linux不适合当作服务器操作系统的四大原因
  7. php废物,PHP的垃圾回收机制以及大概实现
  8. latex table 表格 显示每行横线
  9. java锁的粗化,锁优化(自旋锁,锁消除,锁粗化,轻量级锁,偏向锁)(深入理解JAVA虚拟机-学习记录)...
  10. 【音频处理】Melodyne 简介 ( Melodyne 音频处理注意事项 | 在音乐宿主软件中加载 Melodyne 插件 )
  11. 鼠标手势插件--smartUp
  12. python用正则写银行系统_python使用正则表达式(Regular Expression)方法超详细
  13. 我是怎么定位线上问题的?
  14. 实习僧网站字体反爬破解思路及步骤分享
  15. 不要迷恋我,虽然我利用Python来耍植物大战僵尸
  16. eclipse使用总结
  17. [转载]考研还是就业
  18. gitlab展示CHANGELOG
  19. 一分钟学会自定义右上角显示数字的ImageView
  20. LAMP环境部署及搭建网校系统

热门文章

  1. 2017android开发找不到工作,揭秘蒋多多2017生活现状,30岁找不到工作曾绝望自杀...
  2. python创建只包含一个元素的元组时_Python 创建包含列表的元组
  3. git拉取单个文件_Git拿来就用
  4. R语言对数线性模型loglm函数_使用R语言进行混合线性模型(mixed linear model) 分析代码及详解...
  5. VR原理讲解及开发入门
  6. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...
  7. 过半网友支持马斯克卖掉特斯拉10%股票,马斯克:会遵守投票结果
  8. 北航成AAAI 2021最大赢家,两篇一作斩获最佳论文、提名奖,研究皆与Transformer相关...
  9. GPT-3获NeurIPS 2020最佳论文奖,苹果华人学者获经典论文奖
  10. 用命令行管理你的GitHub项目,不必再开网页,官方CLI工具1.0版今日上线