Лучшее руководство по Memento Pattern в 2024 году. В этом руководстве вы можете изучить введение,реализация,
Режим Напоминание (Memento Pattern) для сохранения состояния объекта с целью восстановления объекта в соответствующее время. Меморандум структуры относятся поведенческие модели.
Намерение: Не нарушая инкапсуляцию захвата внутреннего состояния объекта, и сохранить состояние за пределами объекта.
Главным образом решить: модель является так называемый меморандум , не разрушая пакет, захватить внутреннее состояние объекта, и сохранить состояние за пределами объекта , чтобы объект впоследствии может быть восстановлен в ранее сохраненное состояние.
Когда использовать: много раз мы всегда должны записать внутреннее состояние объекта, цель сделать так , чтобы позволить пользователям отменять неопределенное или неправильное функционирование, может быть восстановлен в своем первоначальном состоянии , так что он " с сожалением" , чтобы поесть.
Как исправить: памятка по классу предназначен для хранения состояния объекта.
Код ключа: клиенты не пара с классом памятка, в сочетании с классом управления памятка.
Примеры применения: 1, сожалеть об этом позже.2, при воспроизведении архива игры. 3, Окна Lane CTRI + Z. 4, IE в спину. 4, база данных управления транзакциями.
Преимущества: 1, чтобы предоставить пользователям способ восстановления состояния механизма , который позволяет пользователям быть более удобным , чтобы вернуться к истории государства.2, для достижения пакет информации, так что пользователю не нужно беспокоиться о состоянии сохранности деталей.
Недостатки: потребляют ресурсы.Если переменных-членов класса тоже должен взяться за сравнительно большие ресурсы, и каждый раз, когда вы сохраняете будет потреблять определенное количество памяти.
Сценарии использования: 1, необходимость сохранения / восстановления соответствующего состояния данных сцены.2, предусмотрен операцию отката.
Примечание: 1, для того , чтобы соответствовать принципам Деметры, а также добавить заметки управления классом.2, в целях экономии памяти, вы можете использовать режим + памятка прототип модели.
Режим Memo использует три классаMemento,составитель исмотрителем.Memento, содержащий объект, который будет восстановлен в государстве. Первоисточник Memento объект создается и хранится в государстве. Объект Сторож отвечает за восстановление объектов из Memento состояния.
MementoPatternDemo,наши демонстрационные классы , использующиеСторожиоригинатораобъект для отображения состояния восстановления объекта.
Создание класса Memento.
Memento.java
общественного класса Memento { частная строка состояния; общественного Memento (String состояние) { this.state = состояние; } Строка GetState общественности () { возвращать состояние; } }
Создать класс оригинатора.
Originator.java
Открытый класс составитель { частная строка состояния; общественного недействительными SetState (String состояние) { this.state = состояние; } Строка GetState общественности () { возвращать состояние; } общественного Memento saveStateToMemento () { вернуть новый Memento (состояние); } общественного недействительными getStateFromMemento (Memento Memento) { состояние = Memento.getState (); } }
Создать класс смотрителем.
CareTaker.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс Сторож { частный List <Memento> mementoList = новый ArrayList <Memento> (); общественного недействительными добавить (Memento состояние) { mementoList.add (состояние); } Memento общественности получить (INT индекс) { возвращать mementoList.get (индекс); } }
ИспользуйтеСторожиоригинатораобъектов.
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 ()); } }
Проверьте выход.
Текущее состояние: состояние # 4 Во-первых сохраненное состояние: Состояние # 2 Второе сохраненное состояние: Состояние # 3