Latest web development tutorials

Memento Pattern

Режим Напоминание (Memento Pattern) для сохранения состояния объекта с целью восстановления объекта в соответствующее время. Меморандум структуры относятся поведенческие модели.

введение

Намерение: Не нарушая инкапсуляцию захвата внутреннего состояния объекта, и сохранить состояние за пределами объекта.

Главным образом решить: модель является так называемый меморандум , не разрушая пакет, захватить внутреннее состояние объекта, и сохранить состояние за пределами объекта , чтобы объект впоследствии может быть восстановлен в ранее сохраненное состояние.

Когда использовать: много раз мы всегда должны записать внутреннее состояние объекта, цель сделать так , чтобы позволить пользователям отменять неопределенное или неправильное функционирование, может быть восстановлен в своем первоначальном состоянии , так что он " с сожалением" , чтобы поесть.

Как исправить: памятка по классу предназначен для хранения состояния объекта.

Код ключа: клиенты не пара с классом памятка, в сочетании с классом управления памятка.

Примеры применения: 1, сожалеть об этом позже.2, при воспроизведении архива игры. 3, Окна Lane CTRI + Z. 4, IE в спину. 4, база данных управления транзакциями.

Преимущества: 1, чтобы предоставить пользователям способ восстановления состояния механизма , который позволяет пользователям быть более удобным , чтобы вернуться к истории государства.2, для достижения пакет информации, так что пользователю не нужно беспокоиться о состоянии сохранности деталей.

Недостатки: потребляют ресурсы.Если переменных-членов класса тоже должен взяться за сравнительно большие ресурсы, и каждый раз, когда вы сохраняете будет потреблять определенное количество памяти.

Сценарии использования: 1, необходимость сохранения / восстановления соответствующего состояния данных сцены.2, предусмотрен операцию отката.

Примечание: 1, для того , чтобы соответствовать принципам Деметры, а также добавить заметки управления классом.2, в целях экономии памяти, вы можете использовать режим + памятка прототип модели.

реализация

Режим Memo использует три классаMemento,составитель исмотрителем.Memento, содержащий объект, который будет восстановлен в государстве. Первоисточник Memento объект создается и хранится в государстве. Объект Сторож отвечает за восстановление объектов из Memento состояния.

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

Меморандум модели UML диаграмма

Шаг 1

Создание класса Memento.

Memento.java

общественного класса Memento {
   частная строка состояния;

   общественного Memento (String состояние) {
      this.state = состояние;
   }

   Строка GetState общественности () {
      возвращать состояние;
   }	
}

Шаг 2

Создать класс оригинатора.

Originator.java

Открытый класс составитель {
   частная строка состояния;

   общественного недействительными SetState (String состояние) {
      this.state = состояние;
   }

   Строка GetState общественности () {
      возвращать состояние;
   }

   общественного Memento saveStateToMemento () {
      вернуть новый Memento (состояние);
   }

   общественного недействительными getStateFromMemento (Memento Memento) {
      состояние = Memento.getState ();
   }
}

Шаг 3

Создать класс смотрителем.

CareTaker.java

импорт java.util.ArrayList;
импорт java.util.List;

Открытый класс Сторож {
   частный List <Memento> mementoList = новый ArrayList <Memento> ();

   общественного недействительными добавить (Memento состояние) {
      mementoList.add (состояние);
   }

   Memento общественности получить (INT индекс) {
      возвращать mementoList.get (индекс);
   }
}

Шаг 4

ИспользуйтеСторожиоригинатораобъектов.

MementoPatternDemo.java

Открытый класс MementoPatternDemo {
   государственной статической силы основных (String []) {агдз
      Первоисточник возбудитель = новый составитель ();
      Сторож Сторож = новый Сторож ();
      originator.setState ( "State # 1");
      originator.setState ( "State # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 4");

      System.out.println ( "Современное состояние:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "Первый сохраненное состояние:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "Второе сохраненное состояние:" + originator.getState ());
   }
}

Шаг 5

Проверьте выход.

Текущее состояние: состояние # 4
Во-первых сохраненное состояние: Состояние # 2
Второе сохраненное состояние: Состояние # 3