备忘录模式
设计模式没有具体的落地代码,写着总感觉是抽象的概念而已
1. 备忘录模式(Memento Pattern)
在不违反封装的情况下保存、获取对象的内部状态,然后在需要的时候可以恢复之前的状态。应用在存档、回退操作(ctrl + z、浏览器回退)
备忘录模式的组成:
- Originator:发起者
- Memento:存储状态的对象
- CareTaker:状态的管理器
2. 流程
流程的背景:模拟游戏内的存档,然后在需要的时候回退
2.1 Originator
public class Originator {
// 发起者内部状态(可有多个属性,这里为了简洁只写一个,用来表示角色等级)
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
// 创建内部的状态
public Memento createMemento() {
return new Memento(this.state);
}
// 回退操作
public void setMemento(Memento memento) {
this.state = memento.getState();
}
}
2.2 Memento
用于保存状态,也就是存档
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
2.3 CareTaker
存档的管理器,内部有多个状态
public class CareTaker {
Map<String, Memento> map = new HashMap<>();
public void add(String name, Memento memento) {
map.put(name, memento);
}
public Memento get(String name) {
return map.get(name);
}
}
2.4 测试
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
// 角色刚进新手村,等级为 1
originator.setState("1");
careTaker.add("2021-10-1", originator.createMemento());
// 新手村毕业了,等级为 10
originator.setState("10");
careTaker.add("2021-11-1", originator.createMemento());
// 游戏通关了,等级为 99
originator.setState("99");
careTaker.add("2021-12-1", originator.createMemento());
// 通关时的等级,1
System.out.println(originator.getState());
// 回档1,回到新手村,10
originator.setMemento(careTaker.get("2021-10-1"));
System.out.println(originator.getState());
// 回档2,回到新手村毕业,99
originator.setMemento(careTaker.get("2021-11-1"));
System.out.println(originator.getState());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2019-12-21 JavaWeb分页