Знімок (шаблон проектування)

Матеріал з Вікіпедії — вільної енциклопедії.

Зні́мок (англ. Memento) - шаблон проектування, відноситься до класу шаблонів поведінки.

Зміст

[ред.] Призначення

Не порушуючи інкапсуляції, фіксує та виносить за межі об'єкту його внутрішній стан так, щоб пізніше можна було відновити з нього об'єкт.

[ред.] Мотивація

[ред.] Застосовність

Слід використовувати шаблон Знімок у випадках, коли:

  • необхідно зберегти миттєвий знімок стану об'єкту (або його частини), щоб згодом об'єкт можна було відтворити у тому ж самому стані;
  • безпосереднє вилучення цього стану розкриває деталі реалізації та порушує інкапсуляцію об'єкту.

[ред.] Структура

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

[ред.] Відносини

  • опікун запитує знімок у хазяїна, деякий час тримає його у себе, опісля повертає хазяїну. Іноді цього не відбувається, бо хазяїн не має необхідності відтворювати свій попередній стан;
UML діаграма, що описує відносини між об'єктами шаблону проектування Знімок
UML діаграма, що описує відносини між об'єктами шаблону проектування Знімок
  • знімки пасивні. Тільки хазяїн, що створив знімок, має доступ до інформації про стан.

[ред.] Джерела

  • Design Patterns: Elements of Reusable Object-Oriented Software