给用户提供了一种可以恢复状态的机制,可以使用户方便的回到某个历史状态,本质是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存该状态。
package com.depthmind.designpattern;
import java.util.ArrayList;
import java.util.List;
public class MementoPattern {
public static void main(String[] args) {
MPlayer player = new MPlayer(100, 100);
player.display();
Memento memento = player.createMemento();
MementoUtil.addMemento(memento);
player.setVit(60);
player.setDef(50);
Memento memento1 = player.createMemento();
MementoUtil.addMemento(memento1);
player.display();
player.recoverMemento(MementoUtil.getMemento(0));
System.out.println("已恢复到初始状态!");
player.display();
}
}
class Memento {
private int vit;
private int def;
public Memento(int vit, int def) {
this.vit = vit;
this.def = def;
}
public int getVit() {
return vit;
}
public void setVit(int vit) {
this.vit = vit;
}
public int getDef() {
return def;
}
public void setDef(int def) {
this.def = def;
}
}
class MementoUtil {
private static List<Memento> mementoList = new ArrayList<>(8);
public static void addMemento(Memento memento) {
mementoList.add(memento);
}
public static Memento getMemento(int index) {
return mementoList.get(index);
}
}
class MPlayer {
private int vit;
private int def;
public Memento createMemento() {
return new Memento(vit, def);
}
public void recoverMemento(Memento memento) {
this.vit = memento.getVit();
this.def = memento.getDef();
}
public void display() {
System.out.println("当前状态:");
System.out.println("战斗力:" + this.vit + ",防御力:" + this.def);
}
public MPlayer(int vit, int def) {
this.vit = vit;
this.def = def;
}
public int getVit() {
return vit;
}
public void setVit(int vit) {
this.vit = vit;
}
public int getDef() {
return def;
}
public void setDef(int def) {
this.def = def;
}
}