Рубрики
Без рубрики

Узор на память

Не нарушая инкапсуляции, захватите и экстернализуйте внутреннее состояние объекта, чтобы объект… С тегами designpatterns, java, pattern, behavioral.

Не нарушая инкапсуляции, захватите и экстернализуйте внутреннее состояние объекта, чтобы объект можно было восстановить в это состояние позже.

  • 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”