Почему мы используем шаблоны?

Они требуют от нас решения проблем, связанных с разработкой программного обеспечения, с помощью проверенного решения.

Мы начнем говорить о шаблонах проектирования в программировании, и нашим первым шаблоном будет шаблон Memento. Основная цель шаблона Memento — сохранить состояние объекта и восстановить его снова, если это необходимо. .

Если вы спрашиваете, что такое состояние объекта? Проверьте эту ссылку, прежде чем я напишу еще одну статью: https://marcus-biel.com/what-is-an-objects-state/

Мы можем легко определить его как действие UNDO, как в MS Word, или как в некоторых играх, которые были сохранены ранее, короче говоря, вы можете использовать шаблон напоминания, когда хотите восстановить свое состояние объекта до предыдущего состояния объекта.

Итак, как мы это сделаем?

В этом шаблоне у нас будет три специальных класса, которые называются создатель, сувенир и смотритель.

Какой класс создателя делать? Что вы думаете?

класс создателя; будет нашим «хранителем и реставратором» объекта состояния.

класс смотрителя; сохранит все состояния объекта, над которым он работает, и вернет эти состояния, а также добавит новые состояния объекта.

класс сувениров; будет хранить текущее состояние объекта, его состояние может быть прочитано классом Originator.

Итак, после всей технической и теоретической части нам нужны некоторые коды, и мы должны закончить домашнюю работу на самом деле:) Мы собираемся написать код для отмены нашего хода.

Начнем с класса Memento!

public class StateMove {
    private String move;

    public StateMove(String move) {
        this.move = move;
    }

    public StateMove createMove() {
        return new StateMove(move);
    }

    public void restore(StateMove state) {
        move = state.getMove();
    }

    public String getMove() {
        return move;
    }


}

Он хранит и возвращает текущее состояние объекта.

Давайте продолжим наш класс смотрителя.

import java.util.ArrayList;
import java.util.List;

public class PrevMove {
    private List<StateMove> moves=new ArrayList<>();
    
    public void push(StateMove move){
        moves.add(move);
    }
    public StateMove pop(){
        var lastIndex=moves.size()-1;
        var lastState=moves.get(lastIndex);
        moves.remove(lastState);
        return lastState;
    }
}

Вот наш класс-оригинатор…

public class Move {
    private String move;

    public String getMove() {
        return move;
    }

    public void setMove(String move) {
        this.move = move;
    }
    public StateMove createMove(){
        return new StateMove(move);
    }
    public void restore(StateMove state){
        move=state.getMove();
    }
}

И, конечно же, мы не можем забыть наш класс Main никогда-никогда.

public class Main {
    public static void main(String[] args) {

        Move move = new Move();        //move object created
        PrevMove prevMove = new PrevMove();         //previous move object also ceated

        move.setMove("Be Bad Guy");       //set move comes from originator it gets move object
        //move.setMove("Make Him Cry");
        prevMove.push(move.createMove()); //return state object

        move.setMove("Apologize");
        prevMove.push(move.createMove());

        move.setMove("Smile");
        System.out.println("Current State: " + move.getMove());

       move.restore(prevMove.pop());  //what stored in the previous mode at above
        System.out.println("First saved State: " + move.getMove());
       move.restore(prevMove.pop());
        System.out.println("Second saved State: " + move.getMove());

    }
}

Я надеюсь, что это объяснило вам достаточно, чтобы понять основную структуру.

Я также хочу быть в курсе других основных шаблонов проектирования.

Увидимся в следующем шаблоне.

Пока!