前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的备忘录模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘
以下正文开始
文章目录
- 备忘录模式概念
- 备忘录模式角色
- 备忘录模式优缺点
- 备忘录模式案例
备忘录模式概念
备忘录模式(Memento Pattern)是一种行为型设计模式。该模式允许在不暴露对象实现细节的情况下,将对象恢复到之前的状态。
备忘录模式角色
备忘录模式由三个核心角色组成:
发起人(Originator):发起人是具有要恢复状态的对象。它定义了创建备忘录对象的方法,以便在需要时使用这些备忘录来恢复对象的先前状态。
备忘录(Memento):备忘录对象是用于保存发起人对象状态的容器。它通常只存储发起人的状态信息,而不包括任何关于状态如何被捕获或恢复的实现细节。
管理者(Caretaker):管理者负责管理备忘录对象,并且只能对它们进行保存和恢复的操作。管理者可以对备忘录执行操作,但是不能查看或修改其内容。
在备忘录模式中,当发起人需要保存旧状态时,它会向管理者请求一个备忘录对象。管理者返回一个新的备忘录对象,并将当前状态保存在其中。如果在之后需要恢复状态时,发起人将这个备忘录对象还原为旧状态,这个备忘录对象将包含旧的状态信息。
备忘录模式优缺点
备忘录模式的优点是它可以让发起人对象有更好的封装性,因为它不需要暴露其实现细节;同时,备忘录对象的存储和恢复操作对发起人对象是透明的,从而减少了耦合。然而,使用备忘录模式可能会带来一些开销,尤其是在需要恢复大量状态信息时。
备忘录模式常见的应用场景包括文本编辑器的撤销操作、数据库事务回滚、游戏存档等等。
备忘录模式案例
接着通过一个案例来学习一下备忘录模式:
首先创建发起人类(Originator)
public class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
/**
* 将当前状态存储到备忘录中
*/
public Memento createMemento() {
return new Memento(state);
}
/**
* 从备忘录中恢复状态
*/
public void restoreFromMemento(Memento memento) {
state = memento.getState();
}
}
接着创建备忘录类(Memento)
public class Memento {
private final String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
创建负责人类(Caretaker)
public class Caretaker {
private Memento memento;
/**
* 存储备忘录
*/
public void storeMemento(Memento memento) {
this.memento = memento;
}
/**
* 获取备忘录
*/
public Memento retrieveMemento() {
return memento;
}
}
然后测试代码
public class MementoPatternDemo {
public static void main(String[] args) {
Originator originator = new Originator(); // 创建发起人对象
Caretaker caretaker = new Caretaker(); // 创建负责人对象
originator.setState("State1"); // 设置状态
caretaker.storeMemento(originator.createMemento()); // 将备忘录存储到负责人中
originator.setState("State2"); // 改变状态
// 从备忘录恢复当前状态
originator.restoreFromMemento(caretaker.retrieveMemento());
System.out.println("Current state: " + originator.getState());
}
}
运行结果为:
Current state: State1
在上述代码中,发起人类(Originator)负责创建和存储备忘录,备忘录类(Memento)用于存储当前状态,负责人类(Caretaker)则负责管理备忘录。在测试代码中,将发起人对象的状态从“State1”改变到“State2”,然后使用负责人对象的备忘录恢复机制将状态还原回原来的“State1”。
好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞