深圳积分商城网站设计,网站正能量晚上在线观看,网站找不到的原因,成都注册公司的流程及手续软件设计模式#xff08;Design pattern#xff09;#xff0c;又称设计模式#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接… 软件设计模式Design pattern又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接【玩转23种Java设计模式】学习目录汇总整理 文章目录 一、简介二、实例1、文本编辑器TextEditor2、管理者Caretaker3、客户端MementoPatternExample 三、总结1、优点2、缺点3、应用场景 一、简介 备忘录模式Memento Pattern是一种行为型设计模式用于保存对象的状态以便在未来可以恢复到之前的某个状态。该模式避免了直接暴露对象的内部状态从而实现了数据的封装性。
主要角色
Originator发起人创建并存储自身状态到备忘录中可以从备忘录中恢复状态。Memento备忘录存储发起人的状态提供给发起人恢复状态的接口。Caretaker管理者负责保存和管理备忘录但不能操作备忘录内容。
二、实例
例如模拟文本编辑器中“撤销”操作的实现。
1、文本编辑器TextEditor
class TextEditor {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 memento) {this.text memento.getText();}// Memento备忘录内部类static class Memento {private final String text;private Memento(String text) {this.text text;}private String getText() {return text;}}
}2、管理者Caretaker
class Caretaker {private final ListTextEditor.Memento mementoList new ArrayList();public void addMemento(TextEditor.Memento memento) {mementoList.add(memento);}public TextEditor.Memento getMemento(int index) {return mementoList.get(index);}
}3、客户端MementoPatternExample
public class MementoPatternExample {public static void main(String[] args) {TextEditor editor new TextEditor();Caretaker caretaker new Caretaker();// 初始状态editor.setText(Hello);System.out.println(Initial Text: editor.getText());caretaker.addMemento(editor.save());// 修改状态1editor.setText(Hello, World);System.out.println(Updated Text: editor.getText());caretaker.addMemento(editor.save());// 修改状态2editor.setText(Hello, Design Patterns);System.out.println(Updated Text: editor.getText());caretaker.addMemento(editor.save());// 撤销操作editor.restore(caretaker.getMemento(1));System.out.println(After Undo: editor.getText());// 再次撤销editor.restore(caretaker.getMemento(0));System.out.println(After Second Undo: editor.getText());}
}三、总结
1、优点
封装性好发起人和备忘录内部状态的实现细节对外界透明保证了对象的封装性。状态恢复可以轻松保存和恢复对象的状态适合需要频繁回退操作的场景。灵活性高支持保存多个状态提供多种恢复方式。
2、缺点
资源消耗大如果状态对象较大或需要保存的状态很多可能会消耗较多内存。管理复杂需要一个管理机制来保存和恢复状态增加了系统复杂性。
3、应用场景
撤销和重做功能如文本编辑器、图形编辑器。游戏存档在游戏中保存和恢复玩家的进度。事务性操作在操作失败时可以回滚到之前的状态。状态恢复适用于需要频繁切换对象状态的场景。