CH08_管理状态

Observer 模式

观察者模式(Observer),又叫发布订阅模式(Publish/Sunscribe)模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

类图

在这里插入图片描述

说明

  • Subject(观察对象)

    Subject角色表示观察对象。Subject角色定义了注册观察者和删除观察者的方法。

  • ConcreteSubject(具体的观察对象)

    ConcreteSubject角色表示具体的被观察对象。当自身状态发生变化后,它会通知所有已注册的Observer角色。

  • Observer(观察者)

    Observer角色负责接收来自Subject角色的状态变化的通知。

  • ConcreteObserver(具体的观察者)

    ConcreteObserver角色表示具体的Observer。当它的Update方法被调用后,会去获取要观察的对象的最新状态。

其他

将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象的一致性。我们不希望为了维护一致性而使用各类紧密耦合,这样会给维护、扩展和重用都带来不方便。

观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖抽象,而不是依赖于具体。从而使的各自的变化都不会影响另外一边的变化。

当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少个对象有待改变是,应该考虑使用观察者模式。

Memento 模式

备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

类图

在这里插入图片描述

说明

  • Originator(发起人)

    负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。

  • Memento(备忘录)

    负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据。

  • Caretaker(管理者)

    负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。

State 模式

状态模式(State ),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

类图

在这里插入图片描述

说明

  • State(状态)

    State角色表示状态,定义了根据不同状态进行不同处理的接口(API)。该接口(API)是那些处理内容依赖于状态的方法的集合。

  • ConcreteState(具体状态)

    ConcreteState角色表示各个具体的状态,它实现了State接口。

  • Context(状况、前后关系、上下文)

    Context角色持有表示当前状态的ConcreteState角色。此外,它还定义了共外部调用者使用State模式的接口(API)。

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

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

相关文章

LiveSIPB流媒体国网B接口功能-国网B接口服务安装使用说明

LiveSIPB 国网B接口服务安装使用说明 1、服务说明1.1、安装包说明1.2、国网B接口信令服务1.3、国网B接口流媒体服务1.4、配置信令服务(LiveCMS)1.5、配置流媒体服务(LiveSMS) 2、服务运行2.1、Windows2.2、Linux 3、配置设备接入3.1、海康STATE_GRID接入示例 4、平台使用4.1、管…

全网唯一值得推荐的C/C++框架和库

全网唯一值得推荐的C/C框架和库 C程序员开发指南 ​ 关注我,天天分享C/C开发技术干货! ​关注他 30 人赞同了该文章 ​ 目录 收起 标准库 C通用框架和库 人工智能 异步事件循环 音频 生态学 压缩 并发性 容器 数据库 调试 游戏引擎 图…

【C语言】指针小结

一、指针是什么? 可以通过运算符&来取得变量实际保存的起始地址。 (这个地址是虚拟地址,并不是真正物理内存上的地址。) **数据类型 *标识符 &变量;** **int pa &a; int pa NULL; (NULL表示地址为0的内存空间…

(15)微信自动化测试-针对微信主窗体的行为控制

应一位药厂的朋友咨询,他说他想知道如何实现下面的功能,都是针对微信主窗体的一些控制!今天我就给他解惑并安排! 微信主窗体是否当前处于最小化。微信主窗体是否隐藏到了系统托盘。最小化微信主窗体。最大化微信主窗体。微信主窗…

媒体捕捉-拍照

引言 在项目开发中,从媒体库中选择图片或使用相机拍摄图片是一个极为普遍的需求。通常,我们使用UIImagePickerController来实现单张图片选择或启动相机拍照。整个拍照过程由UIImagePickerController内部实现,无需我们关心细节,只…

了解近20年临床检验结果互认的推动-九五小庞

检验结果互认的政策沿革 新冠核酸检测可以说是第一个全国范围内,各医疗机构之间的结果互认项目,也是ICL对于检验结果互认的一个实践。我们对于检验结果互认早在2000年,就已经引起了国家层面的重视,并且联合多部委发布了相关指导意…

docker容器化部署及数据持久化

1、加载MySQL 5.7的镜像 docker load -i mysql-5.7.tar.gz 2、执⾏命令启动MySQL容器: sh start-mysql.sh docker run -itd \ --name mysql \ --restart always \ -p 30036:3306 \ -v $PWD/mysql/config-file.cnf:/etc/mysql/conf.d/config-file.cnf \ -v $PWD/m…

【竞技宝】DOTA2:二号位地位发生变化 圣斧、血棘助法核重回巅峰!

北京时间2024年1月5日,目前国服已经更新7.35b版本一段时间了,在这段时间里,各位看官是否感受到了比赛节奏和英雄胜率方面的变化呢?从全分段的出场率以及胜率的变化来看,二号位在游戏内的地位已经发生了很大的变化。 在…

小兔鲜儿 uniapp - SKU 模块

目录 存货单位(SKU)​ 插件市场​ 下载 SKU 插件​ 使用 SKU 插件​ 插件类型问题​ 核心业务​ 渲染商品规格​ 打开弹窗交互​ 渲染被选中的值​ 存货单位(SKU)​ SKU 概念 存货单位(Stock Keeping Unit&a…

论Acrel-2000MG微电网能量管理系统在储能行业的应用-安科瑞 蒋静

一、概述: 在新型电力系统中新能源装机容量逐年提高,但是新能源比如光伏发电、风力发电是不稳定的能源,所以要维持电网稳定,促进新能源发电的消纳,储能将成为至关重要的一环,是分布式光伏、风电等新能源消纳以及电网安…

年终总结——平凡又不平凡的2023

前言 总结不知道该如何写起,也不知该如何建立这一篇文章的大致框架,只知道我的2023大概也就分成两大块罢了。说起2023一整年,只能用平凡而又不平凡来形容,平凡在我依旧没有什么太突出的技术点,专业水平也一直处于龟速…

不同版本opencvsharp的依赖

结合Github和NuGet查看 Github主页 OpenCvSharp-AnyCPU(lastest Version 2.4.10.20170306) VC2013 runtime Framework OpenCvSharp3-AnyCPU(lastest Version 4.0.0.20181129) VC2015 runtime Framework OpenCvSharp4 (lastest…

【InnoDB数据存储结构】第3章节:区、段、碎片区和表空间

文章目录结构 区、段、碎片区和表空间 什么是区?什么是段?什么是碎片区?什么是表空间? 在上文 InooDB 存储行格式一文中已经大致讲述过,再来回顾一下,直接上图: 名词解释如下: 行…

Windows系统如何使用VNC远程连接Deepin桌面【内网穿透】

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

463岛屿周长

题目 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个…

Linux第15步_安装FTP客户端

安装完FTP服务器后,还需要安装FTP客户端,才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中,找到“FileZilla_3.51.0_win64-setup.exe”,双击它,就可以安装。 2、点击“I …

云计算历年题整理

第一大题纯计算 第一大题4或n个xx(只答若干个短语) 第一大题AWS描述名词 第二大题CUDA代码 第二大题描述名词(很多和第一大题一样与AWS有关但是比第一大题难) 第二大题计算 第三大题Map/Reduce项目涉及代码 下列Map/Reduce伪代码…

pygame学习(二)——绘制线条、圆、矩形等图案

导语 pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模…

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上,因此长期以来都存在一个难题:精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…