备忘录模式
概述
在软件使用过程中难免会出现一些误操作,如不小心删除了某些文字或图片,数据填入错误等,对于这些误操作,需要提供一种后悔机制,让系统可以回到误操作前的状态。备忘录模式提供了一种对象状态的撤销实现机制,当系统中某一对象需要恢复到某一历史状态时可以使用备忘录模式来进行设计
模式实例
某系统提供了用户信息操作模块,用户可以修改自己的各项信息,用户在进行了错误操作后可以恢复到操作之前的状态。
UserInfoDTO(用户信息类)
package dp.memento;
public class UserInfoDTO {
private String account;
private String password;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// 创建一个备忘录对象
public Memento saveMemento() {
return new Memento(account, password);
}
// 根据备忘录对象恢复状态
public void restoreMemento(Memento memento) {
this.account = memento.getAccount();
this.password = memento.getPassword();
}
public void show() {
System.out.println("Account: " + this.account);
System.out.println("Password: " + this.getPassword());
}
}
备忘录 Memento
package dp.memento;
class Memento {
private String account;
private String password;
public Memento(String account, String password) {
this.account = account;
this.password = password;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
测试类 Client
import dp.memento.UserInfoDTO;
import dp.memento.Caretaker;
public class Client {
public static void main(String[] args) {
UserInfoDTO user = new UserInfoDTO();
user.setAccount("zhangsan");
user.setPassword("123456");
System.out.println("状态一");
user.show();
// 保存备忘录
user.saveMemento();
System.out.println("------------------------");
Memento memento = user.setPassword("11111111");
System.out.println("状态二");
user.show();
System.out.println("------------------------");
// 从备忘录中恢复
user.restoreMemento(memento);
System.out.println("回到状态一");
user.show();
System.out.println("------------------------");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战