Сегодняшний шаблон — это шаблон Memento, который используется в средах отмены, чтобы вернуть объект в предыдущее состояние.
Памятка в реальном мире
В реальном мире сувениры используются как напоминание или ссылка на то, как что-то должно выглядеть. Например, если вы решите разобрать телефон, чтобы заменить внутреннюю часть, у вас может быть доступный идентичный телефон, который вы будете использовать в качестве справочного, гарантируя, что вы можете вернуть телефон в исходное состояние.
Refcard Designs Patterns
Для лучшего обзора самых популярных шаблонов дизайна, лучше всего начать с Refcard Designs Patterns от DZone .
Образец Памяти
Шаблон Memento известен как поведенческий шаблон, так как он используется для управления алгоритмами, отношениями и обязанностями между объектами. Определение Memento, представленное в оригинальной книге «Банды четырех» на DesignPatterns, гласит:
Захватывает и экстернализует внутреннее состояние объекта, чтобы впоследствии его можно было восстановить без нарушения инкапсуляции.
Следующая диаграмма показывает, как моделируется образец сувенира.
Давайте посмотрим на каждого из участников этого паттерна. Оригинатор является объектом , который знает , как спасти себя: класс , который вы хотите сделать с сохранением состояния. Сторож в том , что объект , который имеет дело с , когда и почему Возбудитель необходимо сохранить или восстановить себя. Memento содержит информацию о состоянии оригинатора, и не может быть изменен смотрителем.
Поток событий таков, что смотритель запрашивает у инициатора объект Memento и выполняет любые необходимые ему действия. Чтобы откатить состояние перед этими действиями, он возвращает объект памятки отправителю.
Когда я буду использовать этот шаблон?
Шаблон Memento полезен, когда вам нужно предоставить механизм отмены в ваших приложениях, когда внутреннее состояние объекта может потребоваться восстановить на более позднем этапе. Используя сериализацию вместе с этим шаблоном, легко сохранить состояние объекта и вернуть его позже.
Так как это работает в Java?
Давайте проиллюстрируем этот шаблон на простом примере в Java. Поскольку этот шаблон используется для фреймворков отмены, мы будем моделировать редактор.
Во-первых, память должна иметь возможность сохранять содержимое редактора, которое будет просто текстом:
//Memento
public class EditorMemento {
private final String editorState;
public EditorMemento(String state) {
editorState = state;
}
public String getSavedState() {
return editorState;
}
}
Теперь наш класс Originator, редактор, может использовать память:
//Originator
public class Editor {
//state
public String editorContents;
public void setState(String contents) {
this.editorContents = contents;
}
public EditorMemento save() {
return new EditorMemento(editorContents);
}
public void restoreToState(EditorMemento memento) {
editorContents = memento.getSavedState();
}
}
Каждый раз, когда мы хотим сохранить состояние, мы вызываем метод save (), а отмена вызывает метод restoreToState.
Затем наш смотритель может отследить все сувениры в стеке, чтобы сработала структура отмены.
Остерегайтесь недостатков
Некоторые проблемы с этим шаблоном состоят в том, что сохранение или восстановление состояния может занимать много времени. При неправильном использовании он может раскрыть внутреннюю структуру вашего объекта, что позволяет любому другому объекту изменять состояние вашего объекта.
Следующий
Когда мы начнем ближе к концу серии, мы посмотрим на паттерн «Посредник».
Наслаждайтесь всей серией «Design Patterns Uncovered»:
Образцы творчества
- Узнайте абстрактный шаблон фабрики
- Изучите Образец Строителя
- Изучите шаблон метода фабрики
- Изучите образец прототипа
- Изучите образец Синглтона
Структурные паттерны
- Узнайте шаблон адаптера
- Изучите Образец Моста
- Изучите составной шаблон
- Изучите Образец Декоратора
- Изучите Образ Фасада
- Выучите образец веса
- Изучите Образец Прокси
Поведенческие образцы
- Изучите Образец Цепочки Ответственности
- Изучите шаблон команд
- Изучите образец интерпретатора
- Изучите образец итератора
- Изучите Образец Посредника
- Выучите Образец Памяти
- Изучите Образец Наблюдателя
- Изучите Государственный Образец
- Узнайте шаблон стратегии
- Изучите шаблон метода шаблона
- Изучите образец посетителя