Шаблон 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