Почему мы используем шаблоны?
Они требуют от нас решения проблем, связанных с разработкой программного обеспечения, с помощью проверенного решения.
Мы начнем говорить о шаблонах проектирования в программировании, и нашим первым шаблоном будет шаблон 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()); } }
Я надеюсь, что это объяснило вам достаточно, чтобы понять основную структуру.
Я также хочу быть в курсе других основных шаблонов проектирования.
Увидимся в следующем шаблоне.
Пока!