Знімок (шаблон проектування)
Матеріал з Вікіпедії — вільної енциклопедії.
Зні́мок (англ. Memento) - шаблон проектування, відноситься до класу шаблонів поведінки.
Зміст |
[ред.] Призначення
Не порушуючи інкапсуляції, фіксує та виносить за межі об'єкту його внутрішній стан так, щоб пізніше можна було відновити з нього об'єкт.
[ред.] Мотивація
[ред.] Застосовність
Слід використовувати шаблон Знімок у випадках, коли:
- необхідно зберегти миттєвий знімок стану об'єкту (або його частини), щоб згодом об'єкт можна було відтворити у тому ж самому стані;
- безпосереднє вилучення цього стану розкриває деталі реалізації та порушує інкапсуляцію об'єкту.
[ред.] Структура

UML діаграма, що описує структуру шаблону проектування Знімок
- Memento – контекст:
- зберігає внутрішній стан об'єкту Originator. Об'єм інформації, що зберігається, може бути різним та визначається потребами хазяїну;
- забороняє доступ усім іншим об'єктам окрім хазяїна. По суті знімок має два інтерфейси. Опікун Caretaker користується лиже вузьким інтерфейсом знімку – він може лише передавати знімок іншим об'єктам. Напроти, хазяїн користується широким інтерфейсом, котрий забезпечує доступ до всіх даних, необхідних для відтворення об'єкту (чи його частини) у попередньому стані. Ідеальний варіант – коли тільки хазяїну, що створив знімок, відкритий доступ до внутрішнього стану знімку;
- Originator – хазяїн:
- створює знімок, що утримує поточний внутрішній стан;
- використовує знімок для відтворення внутрішнього стану;
- CareTaker – опікун:
- відповідає за зберігання знімку;
- не проводить жодних операцій над знімком та не має уяви про його внутрішній зміст.
[ред.] Відносини
- опікун запитує знімок у хазяїна, деякий час тримає його у себе, опісля повертає хазяїну. Іноді цього не відбувається, бо хазяїн не має необхідності відтворювати свій попередній стан;

UML діаграма, що описує відносини між об'єктами шаблону проектування Знімок
- знімки пасивні. Тільки хазяїн, що створив знімок, має доступ до інформації про стан.
[ред.] Джерела
- Design Patterns: Elements of Reusable Object-Oriented Software