Memento 模式解決了在不違反物件封裝的情況下擷取和復原物件內部狀態的需求。這在您想要實現撤消/重做功能、允許物件恢復到先前狀態的場景中非常有用。
Memento 模式涉及三個主要組成部分:
發起者建立一個包含其目前狀態快照的備忘錄。然後,管理員可以儲存該備忘錄,並在需要時用於恢復發起者的狀態。
Memento 模式的實際範例是提供撤銷/重做功能的文字編輯器。文件的每次變更都可以儲存為備忘錄,允許使用者根據需要恢復到文件之前的狀態。
代碼中的備忘錄模式:
// Originator public class Editor { private String content; public void setContent(String content) { this.content = content; } public String getContent() { return content; } public Memento save() { return new Memento(content); } public void restore(Memento memento) { content = memento.getContent(); } // Memento public static class Memento { private final String content; public Memento(String content) { this.content = content; } private String getContent() { return content; } } } // Caretaker public class History { private final Stackhistory = new Stack(); public void save(Editor editor) { history.push(editor.save()); } public void undo(Editor editor) { if (!history.isEmpty()) { editor.restore(history.pop()); } } } // Client code public class Client { public static void main(String[] args) { Editor editor = new Editor(); History history = new History(); editor.setContent("Version 1"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 2"); history.save(editor); System.out.println(editor.getContent()); editor.setContent("Version 3"); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); history.undo(editor); System.out.println(editor.getContent()); } }
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3