版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/89710158
象棋类
/**
* 需要备忘的象棋信息
*/
public class Chessman {
//象棋的基本信息
private String name;
private int x;
private int y;
/**
* 备忘当前象棋的状态
*
* @return
*/
public ChessmanMemento CreateMemento() {
return new ChessmanMemento(name, x, y);
}
/**
* 使用备忘录恢复象棋状态
*
* @param chessmanMemento
*/
public void setMemento(ChessmanMemento chessmanMemento) {
this.name = chessmanMemento.getName();
this.x = chessmanMemento.getX();
this.y = chessmanMemento.getY();
}
public Chessman() {
}
public Chessman(String name, int x, int y) {
this.name = name;
this.x = x;
this.y = y;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "Chessman{" +
"name='" + name + '\'' +
", x=" + x +
", y=" + y +
'}';
}
}
象棋备忘录类 用于保存象棋的信息 可以悔棋
/**
* 备忘录 用于保存象棋的状态信息
*/
public class ChessmanMemento {
//备忘象棋的基本信息
private String name;
private int x;
private int y;
public ChessmanMemento(String name, int x, int y) {
this.name = name;
this.x = x;
this.y = y;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
管理备忘录的类
/**
* 备忘录负责人 管理备忘录 隐藏备忘录内部实现
*/
public class MementoCaretaker {
private ChessmanMemento chessmanMemento;
public ChessmanMemento getChessmanMemento() {
return chessmanMemento;
}
public void setChessmanMemento(ChessmanMemento chessmanMemento) {
this.chessmanMemento = chessmanMemento;
}
}
测试主类
/**
* 象棋悔棋备忘录测试
*/
public class Main {
public static void main(String[] args) {
//象棋初始状态
Chessman chessman = new Chessman("马", 1, 1);
System.out.println(chessman);
//保存象棋当前的状态到备忘录
MementoCaretaker mementoCaretaker = new MementoCaretaker();
mementoCaretaker.setChessmanMemento(chessman.CreateMemento());
//修改了象棋的状态
chessman.setX(666);
chessman.setY(666);
System.out.println(chessman);
//此时想要悔棋 可以用备忘录里的数据恢复
chessman.setMemento(mementoCaretaker.getChessmanMemento());
System.out.println(chessman);
}
}