Observer观察者模式(组件协作)

观察者模式(组件协作)

链接:观察者模式实例代码 + 解析

目的

  • 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。

  • 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。

模式定义

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 ——《 设计模式》 GoF

要点总结

  • 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。

  • 目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。

  • 观察者自己决定是否需要订阅通知,目标对象对此一无所知。

  • Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。

    Ps. 虽然根据设计模式的思想我们应该去找该子模块的抽象类(父类),在使用时再具体去实例化对应的所需的子类.但是由于该模块扮演的角色是通知,所以完全可以将其完全脱离出去,并用一个抽象的通知机制替代, 而不是采用组合其抽象类的强耦合的方法。
    Eg.
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307675.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Decorator装饰模式(单一责任)

Decorator(装饰模式:单一责任模式) 链接:装饰模式实例代码 解析 目的 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性&#xff…

《Spring Cloud学习笔记:分布式事务Seata》

1.分布式事务理论基础 1.1.本地事务 本地事务,也就是传统的单机事务,在传统的数据库事务中,必须要满足ACID四个原则: 1.2.分布式事务 分布式事务,就是指不是在单个服务或单个数据库架构下产生的事务。 分布式事务是…

Element Plus中表格树型结构,像el-tree的属性check-strictly一样,实现遵循父子不互相关联

实现效果: 勾选父节点时,不影响字节点的选中状态。先上效果如图: 勾选一个字节的,父节点不是半选状态,勾选了父节点,子节点没有被选中。 实现思路 借助el-table的select回调事件,而不是借助…

堪比Postman!这款IDEA插件真好用!

Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…

AI智能分析网关V4算法在幼儿园视频监管系统的应用与设计

一、背景需求 在科技浪潮的推动下,智慧化监管已然成为幼儿园管理发展的必然趋势。通过引入尖端技术手段,智慧幼儿园监管解决方案不仅显著提升了管理效率,更为孩子们的安全与健康筑起一道坚实的屏障。为了全方位守护幼儿的平安,幼…

【Unity美术】Unity工程师对3D模型需要达到的了解【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

在 Golang 应用程序中管理多个数据库

掌握在 Golang 项目中处理多个数据库的艺术 在当前软件开发领域中,处理单个应用程序内的多个数据库的需求越来越普遍。具有强大功能的 Golang 是处理此类任务的绝佳解决方案,无论您是与多个数据源合作还是仅为增强组织和可扩展性而分隔数据。在本文中&a…

算法学习系列(十六):二维数组填充数字问题

目录 引言一、思路二、代码模板三、例题总结1.回字蛇形矩阵2.三角填充3.回文填充二 引言 关于这个二维数组填数问题我碰到过很多次,不管是找工作笔试面试,还是在算法竞赛,而且这种问题都有很多种变形,当初学算法的时候让我很是头…

深度解析 | 什么是超融合数据中心网络?

数据中心网络连接数据中心内部通用计算、存储和高性能计算资源,服务器间的所有数据交互都要经由网络转发。当前,IT架构、计算和存储技术都在发生重大变革,驱动数据中心网络从原来的多张网络独立部署向全以太化演进。而传统的以太网无法满足存…

Linux磁盘阵列

一.RAID磁盘阵列介绍 RAID(Redundatnt Array of lndependent Disks),全称为:独立冗余磁盘阵列 解释: RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻…

【Linux】深挖进程地址空间

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟悉【Linux】进程地址空间 > 毒鸡汤&#xff…

vue连接本地服务器

vue 连接本地服务器做后端。 后端服务 使用springboot新建一个基于restful的接口,访问如下的地址,返回值。 vue构建 新建一个vue项目,安装访问服务器的插件。 npm install axios vue-axios --save 修改main.js使用axios,最终…