Введение

Шаблон проектирования программного обеспечения. Шаблон "Снимок" (Memento) – это шаблон проектирования программного обеспечения, который предоставляет доступ к внутреннему состоянию объекта. Один из примеров использования – восстановление объекта в предыдущее состояние (отмена через возврат), другой – ведение версий, третий – пользовательская сериализация. Шаблон "Снимок" реализуется с помощью трех объектов: объекта-источника, управляющего объекта и снимка. Объект-источник – это объект, имеющий внутреннее состояние. Управляющий объект собирается выполнить какие-либо действия с объектом-источником, но хочет иметь возможность отменить эти изменения. Сначала управляющий объект запрашивает у объекта-источника объект "снимок". Затем он выполняет необходимые операции (или последовательность операций). Чтобы вернуться к состоянию, предшествовавшему операциям, он возвращает объект "снимок" объекту-источнику. Сам объект "снимок" является непрозрачным объектом (то есть управляющий объект не должен и не может его изменять). При использовании этого шаблона следует учитывать, что объект-источник может изменять другие объекты или ресурсы – шаблон "Снимок" работает только с одним объектом. Классическими примерами шаблона "Снимок" являются генератор псевдослучайных чисел (каждый потребитель генератора псевдослучайных чисел выступает в роли управляющего объекта, который может инициализировать генератор (объект-источник) тем же начальным значением (снимок), чтобы получить идентичную последовательность псевдослучайных чисел) и состояние в конечном автомате.

Обзор

Шаблон проектирования Memento — один из двадцати трех известных шаблонов проектирования, описанных в книге "Паттерны проектирования" (Design Patterns) от GoF 1994 года, которые показывают, как решать часто встречающиеся задачи проектирования для создания гибкого и повторно используемого объектно-ориентированного программного обеспечения, то есть объектов, которые проще реализовать, изменять, тестировать и повторно использовать. Шаблон Memento был разработан Ноа Томпсоном, Дэвидом Эспириту и доктором Дрю Клинкенбардом для ранних продуктов HP.