Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Які три ролі беруть участь у Memento?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)У патерні **Memento (Знімок)** беруть участь **три ключові ролі**, кожна з яких відповідає за свій аспект збереження і відновлення стану. **Ключове:** **Originator** відповідає за дані, **Memento** за безпечне зберігання, **Caretaker** за контроль історії, зберігаючи при цьому інкапсуляцію і незалежність компонентів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняУ патерні **Memento (Знімок)** беруть участь **три ключові ролі**, кожна з яких відповідає за свій аспект збереження і відновлення стану: --- ### 1. **Originator (Створювач)** Об'єкт, чий стан потрібно зберегти і пізніше відновити. Він сам знає, які дані важливо зафіксувати, і може: - створити знімок (`createMemento()`), - відновитися з нього (`restore(memento)`). **Приклад:** ```java class Editor { private String text; public void setText(String text) { this.text = text; } public String getText() { return text; } public Memento save() { return new Memento(text); } public void restore(Memento m) { text = m.getState(); } } ``` Створювач - **власник стану** і **єдиний, хто знає його структуру**. --- ### 2. **Memento (Знімок)** Об'єкт, який **зберігає стан Створювача** у певний момент часу. Його внутрішній устрій **закритий** від інших об'єктів - ніхто, крім Originator, не може змінювати чи читати стан. **Приклад:** ```java class Memento { private final String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } ``` Знімок - **інкапсульований контейнер** стану. --- ### 3. **Caretaker (Опікун)** Об'єкт, який **керує історією знімків**, але не знає, що всередині них. Він зберігає, вилучає і передає знімки назад Створювачу за потреби. **Приклад:** ```java class History { private Stack<Memento> history = new Stack<>(); public void push(Memento m) { history.push(m); } public Memento pop() { return history.pop(); } } ``` Caretaker відповідає за **життєвий цикл знімків**, але не втручається в їхній вміст. --- ### **Коротко** | Роль | Відповідальність | |---|---| | **Originator** | Створює і відновлює свій стан | | **Memento** | Зберігає стан, не розкриваючи деталей реалізації | | **Caretaker** | Зберігає і керує знімками, не знаючи їхнього вмісту | --- ### **Підсумок** Патерн **Memento** розподіляє обов'язки так, щоб: - **Originator** відповідав за дані, - **Memento** за безпечне зберігання, - **Caretaker** за контроль історії, зберігаючи при цьому **інкапсуляцію і незалежність компонентів**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.