1. Определение
Не уничтожая инкапсуляцию, захватите внутреннее состояние объекта и сохраните это состояние за пределами объекта. Таким образом, объект может быть восстановлен до его первоначального сохраненного состояния позже.
2. Причины использования
Хотите восстановить исходное состояние объекта в какой -то момент.
3. Примеры применимых ситуаций
Есть много применений режима заметки, но мы видели это, но мы не думали об этом тщательно. Это просто использование режима памяти. Позвольте мне привести несколько примеров:
Например. Использование заметок в JSP+Javabean:
При добавлении учетной записи в систему вам необходимо заполнить имя пользователя, пароль, контактный номер, адрес и другую информацию в форме. Если некоторые поля не заполнены или не заполняются неправильно, когда пользователь нажимает кнопку «Отправить», вам необходимо сохранить параметры, введенные пользователем на новой странице и пригласить на неправильные параметры. Это достигается с использованием характеристик Scope = "request" или scope = "session" Javabean, то есть достигается с использованием режима памяти.
EG2 При ремонте тормоза машины. Сначала удалите перегородки с обеих сторон, чтобы обнажить левую и правую тормозную площадку. Только один кусок может быть удален, а другая кусок служит памятником, чтобы указать, как установлен тормоз. Только после того, как ремонт этого произведения будет завершена, можно удалить другую часть. Когда вторая часть удалена, первая часть становится памятки.
EG3 Говорят, что нет никакого сожаления о покупке в жизни. Мы все платим цену за то, что делаем, но в мягком мире есть «сожаление». После того, как я меняю определенные состояния чего -то, если мы спасаем определенные состояния этой вещи раньше, мы можем восстановить состояние вещи в режиме памяти. На самом деле, это также «ящик с сокровищами лунного света», которая может повернуть время назад, и слово «магия» удивительно.
4. Структура и описание диаграммы класса
(1) Диаграмма класса выглядит следующим образом:
(2) Описание класса (i) Memento: Memorandum Роль, основная работа заключается в следующем:
Хранить внутреннее состояние объекта инициатора;
Он может защитить свой контент от чтения любым объектом, кроме объекта создателя.
(ii) Ориентатор: роль спонсора, в основном выполняет следующие задачи:
Создать объект Memo с текущим внутренним состоянием;
Используйте объект Memo для хранения его внутреннего состояния.
(iii) смотритель: ответственный человек, работа завершена следующим образом:
Отвечает за сохранение объектов меморандумы;
Содержимое объекта Memo не сохраняется.
5. Пример
/ *** Объект данных*/ public Class DataState {Private String Action; public void setAction (string action) {this.Action = action; } public String getAction () {return action; }} /*** Объект, который сохраняет копию внутреннего состояния другого объекта. Таким образом, объект может быть восстановлен до первоначального сохраненного состояния в будущем. */ import java.io.file; импортировать java.io.serializable; открытый класс Memento реализует Serializable { /*Private Int Number; private file file = null; public Memento (Originator o) {this.number = o.getNumber (); this.file = o.getFile (); } public int getNumber () {return this.number; } public void setNumber (int number) {this.number = number; } public file getFile () {return this.file; } public void setFile (файл файла) {this.file = file; } */ частное состояние данных; public Memento (Originator o) {this.state = o.getState (); } public DataState getState () {return State; } public void setState (состояние dataState) {this.state = state; }} Public Class Originator { /* Private Int Number; private file file = null; public Originator () {} // Создать Memento и передать его в публичное сувенир как параметр public memento getMemento () {return new Memento (this); } // Установите сохраненные данные из Memento и восстановите их до первоначального государственного публичного void setMemento (memento m) {number = m.getnumber (); file = m.getFile (); } public int getNumber () {return №; } public void setNumber (int number) {this.number = number; } public file getFile () {return file; } public void setFile (файл файла) {this.file = file; }*/ частное состояние данных; public Originator () {} public Originator (состояние dataState) {this.state = state; } // Создать сувенир и передать его в публичное сувенир как параметр public memento getMemento () {return new Memento (this); } // Установите сохраненные данные из Memento и восстановите их до первоначального государственного публичного void setMemento (memento m) { / * * Объект, созданный getMemento (), сохраняется в контейнере. * Когда его нужно восстановить, передайте его в текущий метод, а затем используйте GetState () для получения */ this.state = m.getState (); } public DataState getState () {return State; } public void setState (состояние dataState) {this.state = state; }} /** Ориентатор используется для загрузки данных, создания объектов Memento и восстановления исходных данных с помощью Memento*/ public Class Test {public static void main (string [] args) {// Originator Originator = new Originator (); // Originator.setNumber (8); // // memento memento = Originator.getMemento (); // System.out.println (memento.getNumber ()); DataState state = new DataState (); State.SetAction («Скопировать символ»); Originator Originator = New Originator (); System.out.println («Создать исходные данные»); Originator.SetState (состояние); System.out.println ("Создать объект Memorandum, сохранение исходного состояния данных"); Memento Memento = Originator.getMemento (); System.out.println («Создать новые данные»); Originator.SetState (новый DataState ()); System.out.println ("После создания новых данных:" + inigorator.getState (). GetAction ()); /** Memento должен быть сохранен в определенном месте и получено, когда это необходимо для восстановления данных, сохраняемых внутри него*/ system.out.println («Восстановить исходные данные после создания новых данных»); Originator.setMemento (Memento); System.out.println (Originator.getState (). GetAction ()); }}Печать:
Создайте оригинальный объект Меморандума о создании данных, сохраните исходное состояние данных. Создайте новые данные после создания новых данных: nul