Разница между паттерном Memento и сериализацией

Я провожу некоторые исследования паттерна Memento, и я, как правило, плохо знаком с поведенческими паттернами, и с моими исследованиями я запутался. Одна из главных вещей, по которой я запутался, - это различия между паттерном Memento и сериализацией.

Из того, что я могу почерпнуть, оба могут быть использованы для хранения объектов и их возвращения на более поздний срок, но я не смог найти четкого ответа о том, каковы основные различия между ними, возможно, я что-то упустил в своем исследовании но мне было интересно, сможет ли кто-нибудь пролить свет на разницу между ними.

Спасибо

4 ответа

Решение

Обычно шаблон Memento используется для реализации поддержки точек отката / сохранения. Например, мне может понадобиться отметить состояние объекта в определенный момент времени, выполнить некоторую работу, а затем принять решение вернуть этот объект обратно в точку, в которой он был отмечен.

Реализация шаблона Memento могла бы использовать сериализацию, которая включала бы сохранение содержимого объекта в байт [] и сохранение в памяти или запись на диск. При возврате содержимое объекта будет перестроено из сериализованной копии.

И наоборот, я мог бы реализовать шаблон Memento, клонируя объект в памяти и сохраняя ссылку на копию, а затем копируя состояние обратно, если объект нуждается в возврате. Этот метод не использует сериализацию.

Шаблон Memento - это шаблон проектирования ОО, используемый для сохранения предыдущих состояний объекта в памяти. Например, полезно реализовать операцию "Отменить".

Сериализация - это процесс преобразования графа объектов в байтовый массив, чтобы сохранить его на диске или отправить, например, в другую JVM по сети. У них мало общего.

Memento - это шаблон проектирования программного обеспечения, который предоставляет возможность восстановить объект в его предыдущем состоянии (отменить с помощью отката).

Структура памятного подарка:

введите описание изображения здесь

Шаблон памятного подарка реализован с тремя объектами: инициатором, смотрителем и памятным подарком.

Отправитель - это некоторый объект, имеющий внутреннее состояние.

Смотритель собирается что-то сделать с отправителем, но хочет иметь возможность отменить изменения. Смотритель сначала спрашивает у создателя памятного предмета. Затем он выполняет любую операцию (или последовательность операций), которую собирался выполнить. Чтобы вернуться к состоянию до выполнения операций, он возвращает объект памятки отправителю.

Сериализация используется для сохранения состояния объекта. Это не шаблон дизайна. Обратитесь к этому вопросу SE для получения дополнительной информации о сериализации.

Использование Serializable кроме объекта "Запись и чтение" в / из файла

Шаблон сувенира может использовать или не использовать сериализацию. Если объект memento не покидает JVM или не передается другим службам через удаленные вызовы, memento может сохранять состояние объекта в памяти без сериализации. Сохраненный объект может быть использован позже для изменения состояния.

Обратитесь к статье создания источника для получения дополнительной информации.

Шаблоны проектирования, как следует из названия, решают проблемы дизайна.

Сериализация - это способ "высушить" объект.

Таким образом, сериализация может быть механизмом реализации, с помощью которого вы можете реализовать шаблон Memento.

Однако вы можете так же легко реализовать шаблон памятного подарка без использования сериализации.

Другие вопросы по тегам