Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design patterns "Memento"

Design patterns "Memento"

Avatar for Anna Brytyk

Anna Brytyk

August 31, 2018
Tweet

More Decks by Anna Brytyk

Other Decks in Technology

Transcript

  1. Снимок (Хранитель, Memento) 3 Снимок — это поведенческий паттерн проектирования,

    который позволяет сохранять и восстанавливать прошлые состояния объектов, не раскрывая подробностей их реализации. Википедия: Снимок - это шаблон разработки программного обеспечения, который обеспечивает возможность восстановления объекта до его предыдущего состояния (отменить с помощью отката). Обычно полезно, когда вам нужно предоставить какую-то функцию отмены. Назначение Не нарушая инкапсуляции, фиксирует и выносит за пределы объекта его внутреннее состояние так, чтобы позднее можно было восстановить в нем объект.
  2. Применимость 4 Необходимость использовать шаблон “Хранитель” возникает, когда: • необходимо

    сохранить мгновенный снимок состояния объекта (или его части), чтобы в последствии объект можно было восстановить в том же состоянии; • прямое получение этого состояния раскрывает детали реализации и нарушает инкапсуляцию объекта.
  3. Участники 6 Memento - хранитель: • сохраняет внутреннее состояние объекта

    O r i g i n a t o r ; • запрещает доступ всем другим объектам, кроме хозяина. Originator - хозяин: • создает хранитель, содержащего снимок текущего внутреннего состояния; • использует хранитель для восстановления внутреннего состояния. Caretaker (механизм отката) - посыльный: • отвечает за сохранение хранителя; • непроизводит никаких операций над хранителем и не исследует его внутреннее содержимое.
  4. 10

  5. 11

  6. 12

  7. Преимущества и недостатки 16 • Не нарушает инкапсуляции исходного объекта.

    • Упрощает структуру исходного объекта. Ему не нужно хранить историю версий своего состояния. • Требует много памяти, если клиенты слишком часто создают снимки. • Может повлечь дополнительные издержки памяти, если объекты, хранящие историю, не освобождают ресурсы, занятые устаревшими снимками. • В некоторых языках (например, PHP, Python, JavaScript) сложно гарантировать, чтобы только исходный объект имел доступ к состоянию снимка.
  8. Примеры использования 17 • Зерно генератора псевдослучайных чисел. • Состояние

    конечного автомата • Контроль промежуточных состояний модели в ORM перед сохранением
  9. Взаимодействие с другими паттернами 18 • Команды помещают информацию о

    состоянии, необходимую для отмены выполненных действий, в хранители • Снимок можно использовать вместе с Итератором, чтобы сохранить текущее состояние обхода структуры данных и вернуться к нему в будущем, если потребуется.
  10. 1. Design Patterns PHP. 2. Шаблоны проектирования с человеческим лицом.

    3. Книга “Паттерны проектирования” Эрик Фримен, Элизабет Фримен. 4. Шаблоны проектирования простым языком. Часть третья. Поведенческие шаблоны 5. Паттерны проектирования. 6. Репозиторий с примерами DesignPatternsPHP 7. Книга “Приемы объектно-ориентированного проектирования: паттерны проектирования” Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес Литература 20