В статье Википедии о шаблоне Memento ничего не говорится о инкапсуляции, фактически, приведенный там пример точно отражает состояние, которое содержится в закрытой переменной в Memento.
Инкапсуляция («A язык механизм для ограничения доступа к некоторым компонентам объекта») относится к тому, как вы должны писать код, чтобы изменить внутреннее состояние объекта.
Однако внутреннее состояние объекта могло быть определено с помощью внешнего ввода, например, содержимое строки зависит от файла, из которого он был прочитан, или от того, какие данные были получены из сети. Состояние флажка зависит от того, проверил ли пользователь его или нет, в то время как соответствующее поле в классе может иметь частный доступ, а состояние может быть доступно только для чтения для других классов.
Защита полей путем помещения их в частный доступ призвана помочь разработчику поддерживать состояния объектов в согласованном состоянии, т. Е. Избегать того, чтобы поля устанавливались в несовместимое состояние из кода вне этого класса (например, если значение поля A
зависит от значения поля B
).
Это не имеет ничего общего с «конфиденциальностью» в том смысле, что эти данные считаются секретными . Конечно, можно написать другой класс, который затем читает сериализованные частные поля и делает их общедоступными в другом классе, или вы даже можете редактировать сериализованный файл, но я не уверен, что из этого получится.