Зберігач (англ. Memento) — поведінковий шаблон проєктування, що дозволяє, не порушуючи інкапсуляцію, зафіксувати
і зберегти внутрішній стан об’єкта, щоб пізніше відновити його до цього стану.
Шаблон Зберігач ми реалізуємо трьома об’єктами: Player(Створителем), Game(Опекуном) та Save(Зберігач).
Хранитель - це об’єкт, який зберігає конкретний знімок стану деякого об’єкта чи ресурсу: рядка,
числа, масиву, екземпляра класу тощо. Унікальність у цьому разі передбачає не заборону існування
однакових станів у різних знімках, а те, що стан можна отримати у вигляді незалежної копії. Будь-який об’єкт,
який зберігається у Зберігачі, повинен бути повною копією вихідного об’єкта, а не посиланням на вихідний об’єкт.
Сам об’єкт Зберігач є непрозорим об’єктом (той, який ніхто не може і не повинен змінювати).
Створитель - це об’єкт, який містить у собі актуальний стан зовнішнього об’єкта строго заданого типу
і вміє створювати унікальну копію цього стану, повертаючи її, обгорнуту в об’єкт Зберігача.
Автор не знає історії змін. Творцю можна примусово встановити конкретний стан ззовні,
що вважатиметься актуальним. Автор повинен подбати про те, щоб цей стан відповідав
типу об’єкта, з яким йому дозволено працювати. Автор може (але не повинен) мати будь-які методи,
але вони не можуть змінювати збережений стан об’єкта.
Опекун керує історією знімків станів. Він може вносити зміни до об’єкта, приймати рішення про збереження
стану зовнішнього об’єкта в Творці, вимагати від Творця знімок поточного стану
або привести стан Творця у відповідність до стану якогось знімка з історії.