Введение
Шаблон проектирования программного обеспечения. Шаблон "Снимок" (Memento) – это шаблон проектирования программного обеспечения, который предоставляет доступ к внутреннему состоянию объекта. Один из примеров использования – восстановление объекта в предыдущее состояние (отмена через возврат), другой – ведение версий, третий – пользовательская сериализация. Шаблон "Снимок" реализуется с помощью трех объектов: объекта-источника, управляющего объекта и снимка. Объект-источник – это объект, имеющий внутреннее состояние. Управляющий объект собирается выполнить какие-либо действия с объектом-источником, но хочет иметь возможность отменить эти изменения. Сначала управляющий объект запрашивает у объекта-источника объект "снимок". Затем он выполняет необходимые операции (или последовательность операций). Чтобы вернуться к состоянию, предшествовавшему операциям, он возвращает объект "снимок" объекту-источнику. Сам объект "снимок" является непрозрачным объектом (то есть управляющий объект не должен и не может его изменять). При использовании этого шаблона следует учитывать, что объект-источник может изменять другие объекты или ресурсы – шаблон "Снимок" работает только с одним объектом. Классическими примерами шаблона "Снимок" являются генератор псевдослучайных чисел (каждый потребитель генератора псевдослучайных чисел выступает в роли управляющего объекта, который может инициализировать генератор (объект-источник) тем же начальным значением (снимок), чтобы получить идентичную последовательность псевдослучайных чисел) и состояние в конечном автомате.
The memento pattern is a software design pattern that exposes the private internal state of an object. One example of how this can be used is to restore an object to its previous state (undo via rollback), another is versioning, another is custom serialization. The memento pattern is implemented with three objects: the originator, a caretaker and a memento. The originator is some object that has an internal state. The caretaker is going to do something to the originator, but wants to be able to undo the change. The caretaker first asks the originator for a memento object. Then it does whatever operation (or sequence of operations) it was going to do. To roll back to the state before the operations, it returns the memento object to the originator. The memento object itself is an opaque object (one which the caretaker cannot, or should not, change). When using this pattern, care should be taken if the originator may change other objects or resources—the memento pattern operates on a single object. Classic examples of the memento pattern include a pseudorandom number generator (each consumer of the PRNG serves as a caretaker who can initialize the PRNG (the originator) with the same seed (the memento) to produce an identical sequence of pseudorandom numbers) and the state in a finite state machine.
Обзор
Шаблон проектирования Memento — один из двадцати трех известных шаблонов проектирования, описанных в книге "Паттерны проектирования" (Design Patterns) от GoF 1994 года, которые показывают, как решать часто встречающиеся задачи проектирования для создания гибкого и повторно используемого объектно-ориентированного программного обеспечения, то есть объектов, которые проще реализовать, изменять, тестировать и повторно использовать. Шаблон Memento был разработан Ноа Томпсоном, Дэвидом Эспириту и доктором Дрю Клинкенбардом для ранних продуктов HP.