Не нарушая инкапсуляции, захватите и экстернализуйте внутреннее состояние объекта, чтобы объект можно было восстановить в это состояние позже.
- Memento: хранит внутреннее состояние объекта-отправителя. Сувенир может хранить столько или столько информации о внутреннем состоянии создателя, сколько необходимо, по усмотрению создателя. Защита от доступа объектов, не являющихся создателем. Сувениры фактически имеют два интерфейса. Смотритель видит узкий интерфейс для Memento – он может передавать memento только другим объектам. Создатель, напротив, видит широкий интерфейс, который позволяет ему получить доступ ко всем данным, необходимым для восстановления себя в прежнее состояние. В идеале доступ к внутреннему состоянию mementos должен быть разрешен только создателю, создающему memento.
- Создатель: создает памятку, содержащую моментальный снимок ее текущего внутреннего состояния. Использует памятку для восстановления своего внутреннего состояния
- Смотритель: отвечает за сохранность сувениров. Никогда не оперирует и не исследует содержимое сувенира.
public class Main { public static void main(String[] args) { Originator o = new Originator(); o.setState("On"); Caretaker c = new Caretaker(); c.setMemento(o.createMemento()); o.setState("Off"); o.setMemento(c.getMemento()); } } public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; System.out.println("State = " + state); } public Memento createMemento() { return new Memento(state); } public void setMemento(Memento memento) { System.out.println("Restoring state..."); setState(memento.getState()); } } public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } } public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
State = On State = Off Restoring state... State = On
eidherjulian61/дизайн-шаблоны
Основные шаблоны Проектирования
ид – 27 сентября ・ 1 минута чтения
Оригинал: “https://dev.to/eidher/memento-pattern-441i”