MEMENTO(备忘录)-- 对象行为型模式

  1. 意图:
    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

  2. 别名:
    Token

  3. 动机:
    有时必要记录一个对象的内部状态。

  4. 适用性:
    a. 必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。
    b. 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

  5. 结构:
    备忘录模式结构图

  6. 参与者:
    a. Memento:
    备忘录存储原发器对象的内部状态。原发器根据需要决定备忘录存储原发器的哪些内部状态。
    防止原发器以外的其它对象访问备忘录。
    b. Originator:
    原发器创建一个备忘录,用以记录当前时刻它的内部状态。
    使用备忘录恢复内部状态。
    c. Caretaker
    负责保存好备忘录。
    不能对备忘录的内容进行操作或检查。

  7. 协作:
    备忘录模式流程图

  8. 效果:
    a. 保持封装边界
    b. 它简化了原发器
    c. 使用备忘录可能代价很高
    d. 定义窄接口和宽接口
    e. 维护备忘录的潜在代价

  9. 实现

  10. 代码示例

    public class Originator {private Integer state;private Memento memento;public Integer getState() {return state;}public void setState(Integer state) {this.state = state;}public void setMemento(Memento memento) {state = memento.getState();}public Memento createMemento() {return new Memento(state);}}public class Memento {private Integer state;public Memento(Integer state) {this.state = state;}public Integer getState() {return state;}public void setState(Integer state) {this.state = state;}}public class Caretaker {}
  1. 已知应用

  2. 相关模式
    a. Command: 命令可以使用备忘陆来为可撤销的操作维护状态。
    b. Iteratro:如前所述备忘录可用于迭代

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

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

相关文章

【云计算】云数据中心网络(五):对等连接

《云网络》系列,共包含以下文章: 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络(一):VPC云数据中心网络(二):弹性公网 IP云数据中心网络(三)…

跟TED演讲学英文:How AI could save (not destroy) education by Sal Khan

How AI could save (not destroy) education Link: How AI could save (not destroy) education Speaker: Sal Khan Date: April 2023 文章目录 How AI could save (not destroy) educationIntroductionVocabularyTranscriptSummary后记 Introduction Sal Khan, the founder…

遥瞻智慧:排水系统远程监控的卓越解决方案

遥瞻智慧:排水系统远程监控的卓越解决方案 在城市脉络的深层肌理中,排水系统犹如一条条隐秘的生命线,默默承载着城市的呼吸与律动。然而,如何以科技之眼,赋予这些无形网络以实时感知、精准调控的能力,使之…

网络管理实验三、SNMP协议工作原理验证与分析

1 实验概括 实验目的: 学习捕获SNMP报文,通过报文分析理解SNMP协议的工作过程。 实验内容: 1) 使用snmputilg发送SNMP数据包; 使用wireshark抓包;使用netstat –an查看代理站TCP/UDP连接表; 2)…

识周期以备,用周期以对

坐在阳台上喝茶,看着三角梅的花朵绽放着,凋零着,随风飘落… 春夏秋冬,花开花落。不禁感慨生命之渺小,敬畏周期的力量。 今天抽空聊聊周期,周期的核心是均值回归,周期也是“道”。 1 过去40年&am…

深入解析Tomcat的工作流程

tomcat解析 Tomcat是一个广泛使用的开源Servlet容器,用于托管Java Web应用程序。理解Tomcat的工作流程对于开发人员和系统管理员来说是非常重要的。本文将深入探讨Tomcat的工作原理,包括请求处理、线程池管理、类加载、以及与Web服务器之间的通信。 ###…

【错题集-编程题】腐烂的苹果(多源 BFS + 最短路)

题目链接:腐烂的苹果_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 多源 BFS 问题,加一点最短路的思想,固定套路。 二、代码 //看了题解之后AC的代码 class Solution { private:int n, m;bool vis[1010][1010];int dx[4]{-1,0,1,0}, dy[4]{…

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】 Java 集合概述Collection 接口继承树Map 接口继承树 Collection 接口方法使用 iterator 接口遍历集合元素使用 forearch 遍历集合元素 List 接口List 实…

Java中的栈和队列

1.前言 在计算机科学中,数据结构是用来组织和存储数据的方式,以便可以高效地访问和修改。栈和队列是两种最基本的数据结构,它们在各种计算过程中都有广泛的应用。本文将介绍栈和队列的概念、特性以及它们的一些常见应用。 2.栈 2.1概念 栈…

求不同字符个数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;char c 0;int a 0, k 0, n 0, q 0;//提示用户&#xff1b;printf("请输入一段话:…

【Java探索之旅】用面向对象的思维构建程序世界

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、初识面向对象1.1 什么是面向对象&#xff1f;1.2 面向对象与面向过程 二、类的定义…

【工厂模式】工厂方法模式、抽象工厂模式-简单例子

简单工厂模式&#xff0c;请跳转到我的另一篇博客【工厂模式】简单工厂模式-简单例子-CSDN博客 四、工厂方法模式 &#xff08;1&#xff09;这部分还是不变&#xff0c;创建一个Car接口&#xff0c;和两个实现类。 public interface Car {void name(); }public class WuLing…

贵阳市人民政府副市长刘岚调研珈和科技

4月9日&#xff0c;贵阳市人民政府副市长、党组成员刘岚一行到珈和科技走访调研&#xff0c;珈和科技总经理冷伟热情接待了考察团&#xff0c;就企业算力需求与合作&#xff0c;特色产业园区建设&#xff0c;科技成果转化落地等方面进行深入交流。 贵阳市教育局局长李波&#…

交换基础配置--单臂路由

1、创建vlan 创建vlan10 创建vlan10和vlan20 创建vlan1到vlan9 vlan1可以不用创建&#xff0c;因为交换机的所有接口默认为vlan1 本实验只需要vlan10和vlan20&#xff0c;以上只是介绍创建vlan的方法。 查看创建的vlan&#xff1a; sw2同理。接着将需要划分vlan的接口划入…

通过PyCharm平台开发Django应用程序

学会使用命令行工具开发Django应用程序是基础&#xff0c;不过更多的时候还是要借助平台开发工具。目前&#xff0c;最好的Django应用程序开发工具就是jetBrains公司推出的PyCharm平台了。 借助PyCharm开发平台&#xff0c;可以极大提高开发Django应用程序的效率&#xff0c;同…

电脑工作者缓解眼部疲劳问题的工具分享

背景 作为以电脑为主要工作工具的人群&#xff0c;特别是开发人员&#xff0c;我们每天都需要长时间紧盯着屏幕&#xff0c;进行代码编写、程序调试、资料查询等工作。这种持续的工作模式无疑给我们的眼睛带来了不小的负担。一天下来&#xff0c;我们常常会感到眼睛干涩、疲劳…

OpenHarmony 视图加载——ImageViewZoom

简介 ImageViewZoom 支持加载 Resource 或 PixelMap 图片&#xff0c;支持设置图像显示类型功能&#xff0c;支持缩放功能&#xff0c;支持平移功能&#xff0c;双击放大功能&#xff0c;可以监听图片大小&#xff0c;资源变化事件&#xff0c;支持清除显示图片功能。 效果展示…

Docker(七):容器监控工具(Portainer、CAdvisor)

一&#xff1a;轻量级可视化监控工具Portainer 可视化监控工具, 可以通过docker安装&#xff0c;用于管理和监控docker&#xff0c;基本上的docker命令都有对应的按钮来操作。 # always 表示docker重启了该容器也跟着重启 docker run -d --name portainer -p 8000:8000 -p 90…

USART(串口通信协议)

USART&#xff08;串口通信协议&#xff09; 【通信的目的】将一个设备的数据传输到另外一个设备&#xff0c;拓展硬件系统 【 通信协议】制定通信的规则&#xff0c;通信双方按照协议进行数据的收发 串口通信中各个参数的含义 【TX】 数据接收脚【RX】 数据发送脚【SCL】 …

Visual Components软件为您带来的价值 衡祖仿真

Visual Components具备丰富的3D仿真功能、快速建模能力、定制化应用程序逻辑和大量预定义组件库等多种特点&#xff0c;为自动化设备制造商、整合商、制造型公司提供简单、 快速和的设计方式&#xff0c;可以有效提高生产效率&#xff0c;并优化资源分配&#xff0c;避免制造过…