Разница между паттерном Memento и сериализацией
Я провожу некоторые исследования паттерна Memento, и я, как правило, плохо знаком с поведенческими паттернами, и с моими исследованиями я запутался. Одна из главных вещей, по которой я запутался, - это различия между паттерном Memento и сериализацией.
Из того, что я могу почерпнуть, оба могут быть использованы для хранения объектов и их возвращения на более поздний срок, но я не смог найти четкого ответа о том, каковы основные различия между ними, возможно, я что-то упустил в своем исследовании но мне было интересно, сможет ли кто-нибудь пролить свет на разницу между ними.
Спасибо
4 ответа
Обычно шаблон Memento используется для реализации поддержки точек отката / сохранения. Например, мне может понадобиться отметить состояние объекта в определенный момент времени, выполнить некоторую работу, а затем принять решение вернуть этот объект обратно в точку, в которой он был отмечен.
Реализация шаблона Memento могла бы использовать сериализацию, которая включала бы сохранение содержимого объекта в байт [] и сохранение в памяти или запись на диск. При возврате содержимое объекта будет перестроено из сериализованной копии.
И наоборот, я мог бы реализовать шаблон Memento, клонируя объект в памяти и сохраняя ссылку на копию, а затем копируя состояние обратно, если объект нуждается в возврате. Этот метод не использует сериализацию.
Шаблон Memento - это шаблон проектирования ОО, используемый для сохранения предыдущих состояний объекта в памяти. Например, полезно реализовать операцию "Отменить".
Сериализация - это процесс преобразования графа объектов в байтовый массив, чтобы сохранить его на диске или отправить, например, в другую JVM по сети. У них мало общего.
Memento - это шаблон проектирования программного обеспечения, который предоставляет возможность восстановить объект в его предыдущем состоянии (отменить с помощью отката).
Структура памятного подарка:
Шаблон памятного подарка реализован с тремя объектами: инициатором, смотрителем и памятным подарком.
Отправитель - это некоторый объект, имеющий внутреннее состояние.
Смотритель собирается что-то сделать с отправителем, но хочет иметь возможность отменить изменения. Смотритель сначала спрашивает у создателя памятного предмета. Затем он выполняет любую операцию (или последовательность операций), которую собирался выполнить. Чтобы вернуться к состоянию до выполнения операций, он возвращает объект памятки отправителю.
Сериализация используется для сохранения состояния объекта. Это не шаблон дизайна. Обратитесь к этому вопросу SE для получения дополнительной информации о сериализации.
Использование Serializable кроме объекта "Запись и чтение" в / из файла
Шаблон сувенира может использовать или не использовать сериализацию. Если объект memento не покидает JVM или не передается другим службам через удаленные вызовы, memento может сохранять состояние объекта в памяти без сериализации. Сохраненный объект может быть использован позже для изменения состояния.
Обратитесь к статье создания источника для получения дополнительной информации.
Шаблоны проектирования, как следует из названия, решают проблемы дизайна.
Сериализация - это способ "высушить" объект.
Таким образом, сериализация может быть механизмом реализации, с помощью которого вы можете реализовать шаблон Memento.
Однако вы можете так же легко реализовать шаблон памятного подарка без использования сериализации.