介绍一下java设计模式中的备忘录模式
时间: 2023-06-06 10:05:49 浏览: 96
备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,从而在需要的时候可以将其恢复。备忘录模式包含三个主要角色:发起人(Originator)、备忘录(Memento)和负责人(Caretaker)。发起人是要被保存状态的对象,负责人负责保存备忘录,备忘录是保存具体状态的对象。备忘录模式可以帮助我们在不破坏对象封装性的前提下实现状态的快照和恢复,实现对象状态的撤销和重置等功能。
相关问题
java 备忘录模式 例子
备忘录模式是一种行为设计模式,它允许在不破坏封装性的情况下捕获和恢复对象的内部状态。下面是一个 Java 备忘录模式的例子:
```java
// 备忘录类
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 原始类
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento saveStateToMemento() {
return new Memento(state);
}
public void getStateFromMemento(Memento memento) {
state = memento.getState();
}
}
// 管理类
class CareTaker {
private List<Memento> mementoList = new ArrayList<>();
public void add(Memento state) {
mementoList.add(state);
}
public Memento get(int index) {
return mementoList.get(index);
}
}
// 测试类
public class MementoPatternDemo {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #3");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #4");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
}
}
```
这个例子中,`Originator` 类表示需要被备份的对象,`Memento` 类表示备份的状态,`CareTaker` 类表示备份管理器。在测试类中,我们可以看到如何使用备忘录模式来保存和恢复对象的状态。
Java 备忘录模式 象棋悔棋
备忘录模式是一种行为设计模式,它允许在不破坏对象封装的前提下保存和恢复对象之前的状态。在象棋游戏中,可以使用备忘录模式实现悔棋功能。
下面是一个简单的 Java 实现:
首先,我们需要定义一个备忘录类,用于存储棋盘状态:
```java
public class ChessboardMemento {
private String[][] boardState;
public ChessboardMemento(String[][] boardState) {
this.boardState = boardState;
}
public String[][] getBoardState() {
return boardState;
}
}
```
然后,我们需要一个游戏状态管理类,用于保存和恢复游戏状态:
```java
public class ChessboardCaretaker {
private List<ChessboardMemento> mementoList = new ArrayList<>();
public void saveState(String[][] boardState) {
mementoList.add(new ChessboardMemento(boardState));
}
public String[][] restoreState(int index) {
return mementoList.get(index).getBoardState();
}
}
```
最后,我们需要一个游戏类,用于实现悔棋功能:
```java
public class ChessGame {
private String[][] boardState = new String[8][8];
private ChessboardCaretaker caretaker = new ChessboardCaretaker();
public ChessGame() {
// 初始化棋盘状态
// ...
}
public void makeMove(int x1, int y1, int x2, int y2) {
// 执行棋子移动操作
// ...
// 保存棋盘状态
caretaker.saveState(boardState);
}
public void undo() {
// 恢复上一次的棋盘状态
boardState = caretaker.restoreState(caretaker.size() - 1);
}
}
```
这样,我们就可以在游戏中实现悔棋功能了。每次执行棋子移动操作时,都会保存当前的棋盘状态。当需要悔棋时,只需要恢复上一次的棋盘状态即可。