备忘录模式

news/2024/10/22 17:38:14/

文章目录

  • 前言
  • 一、备忘录模式基本介绍
  • 二、备忘录模式原理代码实现
    • 备忘录对象 Memento
    • 发起者 Originator
    • 管理备忘录类 Caretaker
    • Clint 测试类
  • 三、游戏角色恢复状态实例
    • 备忘录对象
    • 游戏角色
    • 管理备忘录对象
    • 测试 Clint
  • 四、备忘录模式的注意事项和细节


前言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


一、备忘录模式基本介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、备忘录模式原理代码实现

备忘录对象 Memento

package tanchishell.SJMS.memento.theory;//备忘录对象
public class Memento {private String state;//构造器public Memento(String state) {super();this.state = state;}public String getState() {return state;}
}

发起者 Originator

package tanchishell.SJMS.memento.theory;//发起者
public class Originator {private String state;//状态信息public String getState() {return state;}public void setState(String state) {this.state = state;}//编写一个方法,可以保存一个状态对象 Memento
//因此编写一个方法,返回 Mementopublic Memento saveStateMemento() {return new Memento(state);}//通过备忘录对象,恢复状态public void getStateFromMemento(Memento memento) {state = memento.getState();}
}

管理备忘录类 Caretaker

package tanchishell.SJMS.memento.theory;import java.util.ArrayList;
import java.util.List;//管理备忘录类
public class Caretaker {//在 List 集合中会有很多的备忘录对象private List<Memento> mementoList = new ArrayList<Memento>();public void add(Memento memento) {mementoList.add(memento);}//获取到第 index 个 Originator 的 备忘录对象(即保存状态)public Memento get(int index) {return mementoList.get(index);}
}

Clint 测试类

package tanchishell.SJMS.memento.theory;public class Client {public static void main(String[] args) {Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.setState(" 状态#1 攻击力 100 ");//保存了当前的状态caretaker.add(originator.saveStateMemento());originator.setState(" 状态#2 攻击力 80 ");caretaker.add(originator.saveStateMemento());originator.setState(" 状态#3 攻击力 50 ");caretaker.add(originator.saveStateMemento());System.out.println("当前的状态是 =" + originator.getState());//希望得到状态 1, 将 originator 恢复到状态 1originator.getStateFromMemento(caretaker.get(0));System.out.println("恢复到状态 1 , 当前的状态是");System.out.println("当前的状态是 =" + originator.getState());}
}输出当前的状态是 = 状态#3 攻击力 50 
恢复到状态 1 , 当前的状态是
当前的状态是 = 状态#1 攻击力 100 

三、游戏角色恢复状态实例

在这里插入图片描述
在这里插入图片描述

备忘录对象

package tanchishell.SJMS.memento.game;//备忘录对象
public class Memento {//攻击力private int vit;//防御力private int def;public Memento(int vit, int def) {super();this.vit = vit;this.def = def;}public int getVit() {return vit;}public void setVit(int vit) {this.vit = vit;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}
}

游戏角色

package tanchishell.SJMS.memento.game;//游戏角色,发起者
public class GameRole {private int vit;private int def;//创建 Memento ,即根据当前的状态得到 Mementopublic Memento createMemento() {return new Memento(vit, def);}//从备忘录对象,恢复 GameRole 的状态public void recoverGameRoleFromMemento(Memento memento) {this.vit = memento.getVit();this.def = memento.getDef();}//显示当前游戏角色的状态public void display() {System.out.println("游戏角色当前的攻击力:" + this.vit + " 防御力: " + this.def);}public int getVit() {return vit;}public void setVit(int vit) {this.vit = vit;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}
}

管理备忘录对象

package tanchishell.SJMS.memento.game;//守护者对象, 保存游戏角色的状态
public class Caretaker {//如果只保存一次状态private Memento memento;//对 GameRole 保存多次状态//private ArrayList<Memento> mementos;//对多个游戏角色保存多个状态//private HashMap<String, ArrayList<Memento>> rolesMementos;public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;}
}

测试 Clint

package tanchishell.SJMS.memento.game;public class Client {public static void main(String[] args) {//创建游戏角色GameRole gameRole = new GameRole();gameRole.setVit(100);gameRole.setDef(100);System.out.println("和 boss 大战前的状态");gameRole.display();//把当前状态保存 caretakerCaretaker caretaker = new Caretaker();caretaker.setMemento(gameRole.createMemento());System.out.println("和 boss 大战~~~");gameRole.setDef(30);gameRole.setVit(30);gameRole.display();System.out.println("大战后,使用备忘录对象恢复到站前");gameRole.recoverGameRoleFromMemento(caretaker.getMemento());System.out.println("恢复后的状态");gameRole.display();}
}输出和 boss 大战前的状态
游戏角色当前的攻击力:100 防御力: 100
和 boss 大战~~~
游戏角色当前的攻击力:30 防御力: 30
大战后,使用备忘录对象恢复到站前
恢复后的状态
游戏角色当前的攻击力:100 防御力: 100

四、备忘录模式的注意事项和细节

在这里插入图片描述


http://www.ppmy.cn/news/57484.html

相关文章

【SpringBoot】获取HttpServletRequest的三种方式

方法一: Controller中增加request参数 RestController public class DemoController { RequestMapping("/demo")public void demo(HttpServletRequest request) { System.out.println(request.getParameter("hello"));} }线程安全缺点: 每个方法都…

spass modeler

课时1&#xff1a;SPSS Modeler 简介 本课时一共分为五个模块&#xff0c;分别是Modeler概述、工具安装、窗口说明以及功能介绍和应用案例。相信通过本课时内容的学习&#xff0c;大家将会对SPSS Modeler有个基础的了解. 在学习本节课内容之前&#xff0c;先来看看本节课我们究…

使用 ESP32 设计智能手表第 2 部分 - 环境光和心率传感器

我们研究了如何为我们的智能手表项目制作一些有趣的表盘。在这一部分中,我们将研究如何将一些传感器连接到我们的智能手表,并将连接 BH1750 环境光传感器和 MAX30102 心率传感器。我们将分别研究这些模块中的每一个的接口。 先决条件——安装必要的库 本文下方提供的 GitHub …

改进YOLOv5/YOLOv8:(创新必备)全新注意力机制DAED-Conv | 高效轻量化注意力下采样 | 大幅降低参数量的同时增加模型精度。

@TOC 自研轻量化注意力下采样机制,在yolov5s的基础下,大幅降低参数量和计算量,并行人检测数据训练中涨点!。 理论介绍 这个模块是一个基于Deformable Convolution的通道注意力(CA)卷积层。它结合了通道注意力机制和可变形卷积来提高卷积神经网络的性能。以下是关于这个…

C++动态规划模板汇总大全

前言 如果你不太了解dp&#xff08;动态规划&#xff09;是个什么东西&#xff0c;请回到上次dp。 链接&#xff1a;动态规划算法详解 数字三角形模型 问题 A: 【一本通基础DP基础模型】【例9.2】数字金字塔 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到…

验证回文串

题目&#xff1a;验证回文串 思路&#xff1a; 这段代码是一个判断字符串是否为回文的函数。它接受一个 string 类型的参数 s&#xff0c;并依次执行两个步骤&#xff1a; 首先对字符串进行预处理&#xff1a; 将大写字母转换成小写字母&#xff1b;移除非字母数字字符。 然…

一起来说说,IT行业里,哪些技术更热门

内容&#xff1a; 对比分析市场上IT行业热门技术&#xff1b;调查了解不同公司对热门技术的需求情况&#xff1b;分析热门技术的优缺点和未来发展趋势&#xff1b;提出对公司IT技术发展的建议。 详情&#xff1a; 一、对比分析市场上IT行业热门技术&#xff1a; 通过对比分…

平时很少使用的c和c++语法逻辑

1. goto语句 example&#xff1a; #include<stdio.h> #include<stdlib.h> int main(){ string hello""; string world""; while(cin>>hello){ goto Tiaoshu; } Tiaoshu: cout<<"hellow world!"<<endl; …