Slide 1

Slide 1 text

ДОКЛАДЧИК: БРИТИК А. Н.

Slide 2

Slide 2 text

“ 2 Суть паттерна

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

“ 5 Реализация

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Классическая реализация 7

Slide 8

Slide 8 text

“ 8 Пример реализации

Slide 9

Slide 9 text

9 Диаграмма классов

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

11

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

13 Тесты

Slide 14

Slide 14 text

14 Тесты

Slide 15

Slide 15 text

“ 15 Выводы

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Примеры использования 17 ● Зерно генератора псевдослучайных чисел. ● Состояние конечного автомата ● Контроль промежуточных состояний модели в ORM перед сохранением

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Спасибо за внимание! Вопросы? 19

Slide 20

Slide 20 text

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