Java设计模式之《备忘录模式》
目录
1. 概念
1.1、定义
1.2、适用场景
2、角色划分
3、实现
1、Originator(发起人)
2、Memento(备忘录)
3、Caretaker(管理者)
4、使用示例
4、优缺点
4.1、优点
4.2、缺点
前言
备忘录模式是一种行为型设计模式,用于在不破坏封装性的情况下保存和恢复对象的状态。它包含源发器、备忘录和管理者三个角色。
该模式常用于撤销操作,如文本编辑器的撤销功能和数据库事务管理。
备忘录模式虽然有内存占用和性能开销的缺点,但在需要状态管理的场景中十分有用。
设计模式分类如下:
1. 概念
1.1、定义
备忘录模式(Memento Pattern))用于在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在需要时恢复这个状态(如撤销操作)。
即允许对象把当前状态保存到外部对象中。以后可将其恢复。
1.2、适用场景
1、需要保存和恢复数据场景(如撤销、历史快照、存档、游戏进度、表单编辑器等)。
2、不希望外部对象随意访问对象内部细节,但需要保存和恢复快照。
2、角色划分
如下图所示:
- Originator(发起人/原发器):拥有内部状态,需要保存和恢复
- Memento(备忘录):保存Originator的状态
- Caretaker(管理者/看护者):保存并管理备忘录,但不能操作备忘录内部实现内容
3、实现
1、Originator(发起人)
class Editor {private String text;public void setText(String text) { this.text = text; }public String getText() { return text; }public Memento save() { return new Memento(text); }public void restore(Memento m) { this.text = m.getText(); }
}
2、Memento(备忘录)
class Memento {private final String text;public Memento(String text) { this.text = text; }public String getText() { return text; }
}
3、Caretaker(管理者)
import java.util.Stack;
class Caretaker {private Stack<Memento> history = new Stack<>();public void add(Memento m) { history.push(m); }public Memento undo() {if (!history.isEmpty()) return history.pop();return null;}
}
4、使用示例
public class Main {public static void main(String[] args) {Editor editor = new Editor();Caretaker caretaker = new Caretaker();editor.setText("第一版");caretaker.add(editor.save());editor.setText("第二版");caretaker.add(editor.save());editor.setText("第三版");// 撤销到第二版editor.restore(caretaker.undo());System.out.println(editor.getText()); // 输出 第二版// 再撤销editor.restore(caretaker.undo());System.out.println(editor.getText()); // 输出 第一版}
}
4、优缺点
4.1、优点
1、状态保存与恢复:
备忘录模式可以帮助我们保存对象的状态,并在需要时恢复到之前的状态。这在某些情况下非常有用,比如撤销操作或者程序崩溃后的恢复。
2、封装性和隔离性:
可以确保对象的状态保存在备忘录对象中,而不会暴露给其他对象。这为对象的封装性和隔离性提供了保护,使得对象的状态变化对其他对象是透明的。
4.2、缺点
1、内存占用:
可能引起较大的内存占用,特别是当对象的状态较多且状态改变频繁时。每个备忘录对象都需要保存一份完整的状态,如果状态较多或者备忘录对象较多,可能会消耗大量内存。
2、性能开销:
备忘录模式涉及到创建、存储和恢复状态的操作,这些操作可能引起一定的性能开销。特别是在状态较大或者对象较复杂的情况下,备忘录模式的性能可能会受到影响。
总结:
参考文章:
1、设计模式(十九)行为型:备忘录模式详解-CSDN博客文章浏览阅读443次,点赞19次,收藏21次。备忘录模式(Memento Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在之后能够将该对象恢复到原先保存的状态。https://blog.csdn.net/ZxqSoftWare/article/details/149712206?ops_request_misc=%257B%2522request%255Fid%2522%253A%252299945c753ba5cd13ba1abf9c2213f646%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=99945c753ba5cd13ba1abf9c2213f646&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-149712206-null-null.142^v102^control&utm_term=%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F&spm=1018.2226.3001.4187