Java设计模式 _行为型模式_备忘录模式

一、备忘录模式

1、备忘录模式
备忘录模式(Memento Pattern)是一种行为型模式。通过保存一个对象的某个状态,以便在适当的时候恢复对象。

2、实现思路
(1)、定义记录数据的格式规范。
(2)、编写实现类,实现备忘实体对象。
(3)、定义操作对象类,内置数据和备忘录集合,记录当前对象的数据,同时添加到备忘录中。

二、代码场景

1、示例场景
用户可以多次操作一个数据,每次操作后的结果会改变。通过备忘录回溯之前的操作数据。
2、代码示例

// 1、定义数据格式
public interface Memento1 {String getData();void setData(String data);
}
// 2、定义实现类,即备忘录对象
public class MementoBook implements Memento1 {String data;   // 备忘录记录data数据public MementoBook(String data) {this.data = data;}@Overridepublic String getData() {return data;}@Overridepublic void setData(String data) {this.data = data;}
}
// 3、定义操作对象,记录数据,记录备忘录,封装回溯方法
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class Originator {String data;      // 操作数据List<MementoBook> mementoBooks;   // 备忘录集合public Originator() {mementoBooks = new ArrayList<>();}public void saveData(String data) {      // 保存操作数据this.data = data;mementoBooks.add(new MementoBook(data));}public void revoke() {                       // 返回上一次操作的数据this.data = mementoBooks.get(mementoBooks.size() - 2).getData();mementoBooks = mementoBooks.subList(0, mementoBooks.size() - 1);}public void revokeHistory(int index) {            // 返回到历史指定的数据this.data = mementoBooks.get(index - 1).getData();mementoBooks = mementoBooks.subList(0, index);}
}
// 4、测试
public static void main(String[] args) {Originator originator = new Originator();originator.saveData("1");originator.saveData("2");originator.saveData("3");originator.saveData("4");originator.saveData("5");originator.saveData("6");originator.saveData("7");originator.saveData("8");originator.saveData("9");originator.saveData("10");System.out.println("当前值:"+originator.getData());originator.revoke();System.out.println("撤回一步的值:"+originator.getData());originator.revoke();System.out.println("撤回一步的值:"+originator.getData());originator.revokeHistory(5);System.out.println("测绘到第5步当时的值:"+originator.getData());}

操作结果:
在这里插入图片描述

总结:备忘录,顾名思义就是怕忘记而做的笔记。主要用来做数据的回溯,方便查询过去时刻的数据。本例实现主要通过定义的一个集合,这个集合仅包含一个对象的操作接口,所以需要内置到对象的属性中。真实开发是,数据可以是任意类型的对象,保存也可以是数据库等第三方组件,但是一定要有一个原则,就是一个操作类仅能有自己的操作数据即可。

学海无涯苦作舟!!!

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

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

相关文章

pyqt Qtreeview分层控件

pyqt Qtreeview分层控件 介绍效果代码 介绍 QTreeView 是 PyQt中的一个控件&#xff0c;它用于展示分层数据&#xff0c;如目录结构、文件系统等。QTreeView 通常与模型&#xff08;如 QStandardItemModel、QFileSystemModel 或自定义模型&#xff09;一起使用&#xff0c;以管…

前端最新面试题(Javascript模块篇)

目录 1 数据类型基础 1.1 JS内置类型 1.2 null和undefined区别 1.3 null是对象吗?为什么? 1.4 1.toString()为什么可以调用? 1.5 0.1+0.2为什么不等于0.3?如何让其相等 1.6 如何理解BigInt 1.7 JS 整数是怎么表示的 1.8 Number() 的存储空间是多大?如果后台发送了…

WAF几种代理模式详解

WAF简介 WAF的具体作用就是检测web应用中特定的应用&#xff0c;针对web应用的漏洞进行安全防护&#xff0c;阻止如SQL注入&#xff0c;XSS&#xff0c;跨脚本网站攻击等 正向代理 WAF和客户端与网络资源服务器都建立连接&#xff0c;但是WAF 的工作口具有自己的 IP 地址&…

oracle数据回显时候递归实战

太简单的两篇递归循环 orcale 在项目里递归循环实战 先看资产表T_ATOM_ASSET结构 看业务类别表T_ATOM_BUSI_CATEGORY结构 问题出现 页面显示 实际对应的归属业务分类 涉及到oracle递归实战(这里不会如何直接在atomAsset的seelct里面处理递归回显) 直接在实现层看atomAs…

推荐系统三十六式学习笔记:开篇词|用知识去对抗技术不平等

目录 开篇词知识点汇总 开篇词 生活中每桩糟糕事&#xff0c;几乎都是时机不当的结果&#xff0c;每一件美好事&#xff0c;都是恰逢其时的结果。在恰到好处的时候&#xff0c;用户邂逅到美好的事物&#xff0c;想必正是一件美好的事情。是的&#xff0c;推荐系统就是促成美好…

【JavaScript脚本宇宙】不可或缺的Web开发工具:图表和可视化

图形化你的数据&#xff1a;六款顶级JavaScript库全接触 前言 在本文中&#xff0c;我们将深入探讨六个强大的JavaScript库&#xff0c;这些库被广泛应用于数据可视化和交互式图形展示。我们将了解每个库的概述、主要特性、使用示例以及使用场景&#xff0c;以帮助读者更全面…

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

因客户要求zynq开发板只有FLASH和emmc&#xff0c;然而还得在petalinux进行开发系统&#xff0c;因FLASH大小有限&#xff0c;所以没办法把内核和根文件地址全部存储到FLASH中&#xff0c;于是想配合emmc进行启动&#xff0c;但是在网上搜索的大多都是只把根文件系统放到了emmc…

Leetcode - 131双周赛

一&#xff0c;3158. 求出出现两次数字的 XOR 值 本题是一道纯模拟题&#xff0c;直接暴力。 代码如下&#xff1a; class Solution {public int duplicateNumbersXOR(int[] nums) {int ans 0;long t 0;for(int x : nums){if(((t>>x)&1) 1){ans ^ x;}else{t | (…

三种路由协议RIP,OSPF和BGP

RIP&#xff08;Routing Information Protocol&#xff09; 概述 类型&#xff1a;距离矢量路由协议&#xff08;Distance Vector Routing Protocol&#xff09;用途&#xff1a;主要用于小型到中型的局域网&#xff08;LAN&#xff09;。工作原理&#xff1a;通过周期性地广…

知识笔记——jieba分词初探

1. 简介 jieba 是python中一个非常好用的 中文分词组件&#xff0c;但它并不是只有分词这一个功能&#xff0c;还提供了很多在分词之上的算法&#xff0c;如关键词提取、词性标注等。 安装方式&#xff1a; pip install jieba2. 分词 支持 3 种分词模式&#xff1a;精确模式…

U-Net网络

U-Net网络 一、基本架构 各个箭头的解释&#xff1a; conv 3 * 3, ReLU&#xff1a;表示通过一个3 * 3的卷积层&#xff0c;并且该层自动附带一个非线性激活层&#xff08;ReLu&#xff09;copy and crop&#xff1a;表示进行裁剪然后再进行拼接&#xff08;在channel的维度上…

Nmap使用方法

Nmap 介绍 Nmap是一个免费开放的网络扫描和嗅探工具包&#xff0c;也叫网络映射器&#xff08;Network Mapper&#xff09;。该工具其基本功能有三个&#xff0c;一是探测一组主机是否在线&#xff1b;其次是扫描主机端口&#xff0c;嗅探所提供的网络服务&#xff1b;三是可…

代码覆盖率工具JaCoCo用法总结及示例

JaCoCo 是一个用于计算 Java 代码覆盖率的工具&#xff0c;它可以测量单元测试覆盖了代码的哪些部分。JaCoCo官网&#xff1a;EclEmma - JaCoCo Java Code Coverage Library 目录 1. JaCoCo 基本用法 2.JaCoCo 集成到构建流程 3.设置 JaCoCo 覆盖率目标 4.集成到现有测试框…

【CALayer-时钟练习-CADisplayLink Objective-C语言】

一、我们接着来看,这个CADisplayLink啊, 1.刚才我们说那个时间呢,差上1秒钟的样子,然后呢,我们现在呢,用这个叫做CADisplayLink的东西,来解决,用这个类,来解决啊, 我们说,NSTimer,是跑到这儿了以后,一秒钟以后, 它才会执行,这个timeChange方法,真正的时间,不…

docker mqqt 安装

安装 cd /data/mqqt/ 目录准备 mkdir /data/mqqt/mosquitto/config/ #vim Dockerfile # 使用官方Eclipse Mosquitto镜像作为基础镜像 FROM eclipse-mosquitto:latest # 复制配置文件到容器内 COPY mosquitto.conf /data/mqqt/mosquitto/config/mosquitto.conf# 暴露默认的M…

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

基于PTP实现主机与相机系统时钟同步功能

基于PTP实现主机与相机系统时钟同步功能 一、PTP简介二、工业相机PTP功能支持三、工业相机时间戳介绍3.1基本概念3.2海康工业相机时间戳介绍3.2.1相机参数时间戳3.2.2图像嵌入式时间戳3.2.3相机event事件时间戳3.2.4各种时间戳的时序关系3.2.5通过工业相机SDK获取相机时间戳 四…

JS实现彩色图片转换为黑白图片

1. 使用 Canvas 研究 canvas 时发现一个有趣的现象——将彩色图片巧妙地转换为黑白图片。以下是实现这一功能的简洁代码示例&#xff1a; <div style"display: flex"><img src"./panda.jpeg" /><button onclick"change()">转…

香港Web3媒体:Techub News

Techub News&#xff1a;香港领先&#xff0c;世界一流的科技媒体平台 在数字化时代&#xff0c;Web3技术的崛起为媒体行业注入了新的活力。作为香港领先的Web3媒体平台&#xff0c;Techub News凭借其专业的团队、丰富的资源和创新的业务模式&#xff0c;成为了行业内的佼佼者。…

Idea java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 解决

咱们平时的开发过程中一定会进行本地调试&#xff0c;今天我也是安装了新的idea之后拉了一个比较大的项目进行本地调试的时候报错。报错信息如下&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Ja…