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

Design patterns "Memento"

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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