崇明做网站,百度识图以图搜图,网站开发书,php网站二次开发用什么软件目录 一、简介二、备忘录模式2.1、备忘录2.2、原发器2.3、备忘录模式 三、优点与缺点 一、简介 备忘录模式#xff08;Memento Pattern#xff09;是一种行为设计模式#xff0c;旨在捕获一个对象的内部状态#xff0c;并在不破坏对象封装的前提下将其保存#xff0c;以便… 目录 一、简介二、备忘录模式2.1、备忘录2.2、原发器2.3、备忘录模式 三、优点与缺点 一、简介 备忘录模式Memento Pattern是一种行为设计模式旨在捕获一个对象的内部状态并在不破坏对象封装的前提下将其保存以便稍后可以恢复到先前的状态。 备忘录模式指的是在不破坏封装性的前提下捕获一个对象的内部状态并在对象之外保存这个状态从而在需要时能将对象恢复到先前的状态。这种模式涉及三个主要角色原发器Originator、备忘录Memento和管理者Caretaker。
原发器Originator负责创建一个备忘录并记录当前状态到备忘录对象也可以从备忘录对象中恢复状态。备忘录Memento用于存储原发器对象的内部状态。备忘录可以记录原发器对象的部分或全部状态。管理者Caretaker负责存储备忘录对象但不能对备忘录的内容进行操作只能够将备忘录传递给其他对象。 备忘录模式允许在不暴露对象实现细节的情况下保存和恢复对象的状态提供了一种方便的方式来回滚对象的状态到先前的状态以支持撤销和恢复等操作。
二、备忘录模式 当涉及到备忘录模式时一个经典的案例是文本编辑器中的撤销Undo和恢复Redo功能。我们先创建一个简单的文本编辑器示例展示如何使用备忘录模式实现撤销和恢复功能
2.1、备忘录
// 备忘录用于保存文本编辑器的状态
public class TextEditorMemento {private final String content;public TextEditorMemento(String content) {this.content content;}public String getContent() {return content;}
}2.2、原发器
import java.util.Stack;// 原发器文本编辑器
public class TextEditor {private String content;private final StackTextEditorMemento history;public TextEditor() {this.content ;this.history new Stack();}public void write(String text) {saveState();content text;}public void undo() {if (!history.isEmpty()) {content history.pop().getContent();}}private void saveState() {history.push(new TextEditorMemento(content));}public void printContent() {System.out.println(当前内容: content);}
}2.3、备忘录模式
// 测试类
public class MementoPatternExample {public static void main(String[] args) {TextEditor editor new TextEditor();editor.write(Hello );editor.write(GoLang!);editor.printContent(); // 输出当前内容: Hello GoLang!editor.undo();editor.printContent(); // 输出当前内容: Hello }
}运行结果
当前内容: Hello GoLang!
当前内容: Hello 三、优点与缺点 备忘录模式具有以下优点和缺点 优点
封装性良好 备忘录模式可以在不破坏对象封装性的前提下捕获和保存对象的状态对客户端隐藏了对象的实现细节。状态保存与恢复 允许在需要时将对象状态保存到备忘录中并在之后将对象恢复到先前的状态支持撤销和恢复操作。简化原发器类 备忘录模式可以使得原发器类的代码更加简洁将状态保存和恢复的责任分离出去。 缺点
资源消耗 当需要频繁保存状态时会消耗一定的内存资源尤其是当状态对象非常大或者对象频繁变动时。潜在性能问题 保存大量状态信息可能会影响性能特别是当备忘录对象的管理成本增加时。不适合大规模对象 对于大规模的对象保存和管理其多个状态可能会变得复杂和低效。 总的来说备忘录模式适用于需要保存和恢复对象状态、支持撤销和恢复操作的场景。它提供了一种简单、清晰的方式来管理对象状态但需要权衡资源消耗和性能问题。通常在需要保存状态快照以支持撤销操作的情况下才会使用备忘录模式。