备忘录模式
一、定义
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。
二、用处和缺点
用处:适用于功能比较复杂,但需要维护或记录属性历史的类。可以根据保存的memento信息还原到前一个状态。
缺点:角色状态需要存储到另一个备忘录对象中,在资源消耗上,内存消耗较大。
三、示例代码
/*发起人类 orginator*/
public class GameCharacter {
private double bloodVolume;
private double blueQuantity;
private double experience;
public double getBloodVolume() {
return bloodVolume;
}
public void setBloodVolume(double bloodVolume) {
this.bloodVolume = bloodVolume;
}
public double getBlueQuantity() {
return blueQuantity;
}
public void setBlueQuantity(double blueQuantity) {
this.blueQuantity = blueQuantity;
}
public double getExperience() {
return experience;
}
public void setExperience(double experience) {
this.experience = experience;
}
public void hitBoos() {
this.bloodVolume = 0;
this.blueQuantity = 0;
this.experience = 0;
}
public void displayState() {
System.out.println("bloodVolume:" + String.valueOf(bloodVolume));
System.out.println("blueQuantity:" + String.valueOf(blueQuantity));
System.out.println("experience:" + String.valueOf(experience));
System.out.println("----------------------");
}
public void initCharacter(double bloodVolume, double blueQuantity, double experience) {
this.bloodVolume = bloodVolume;
this.blueQuantity = blueQuantity;
this.experience = experience;
}
/*恢复备份*/
public void recovery(StateStore stateStore) {
this.bloodVolume = stateStore.getBloodVolume();
this.blueQuantity = stateStore.getBlueQuantity();
this.experience = stateStore.getExperience();
}
/*创建备份*/
public StateStore backups() {
StateStore stateStore = new StateStore(this.bloodVolume, this.blueQuantity, this.experience);
return stateStore;
}
}
/*备忘录类*/
public class StateStore {
private double bloodVolume;
private double blueQuantity;
private double experience;
public StateStore(double bloodVolume, double blueQuantity, double experience) {
this.bloodVolume = bloodVolume;
this.blueQuantity = blueQuantity;
this.experience = experience;
}
public double getBloodVolume() {
return bloodVolume;
}
public double getBlueQuantity() {
return blueQuantity;
}
public double getExperience() {
return experience;
}
}
/*备忘录管理类*/
public class StorageManager {
StateStore stateStore;
public StateStore getStateStore() {
return stateStore;
}
public void setStateStore(StateStore stateStore) {
this.stateStore = stateStore;
}
}
/*客户端*/
public class Client {
public static void main(String[] args) {
GameCharacter yasuo=new GameCharacter();
yasuo.initCharacter(100,100,100);
yasuo.displayState();
/*设置好备份*/
StateStore stateStore=yasuo.backups();
StorageManager storageManager=new StorageManager();
storageManager.setStateStore(stateStore);
yasuo.hitBoos();
/*回滚到备份数据*/
yasuo.recovery(storageManager.getStateStore());
yasuo.displayState();
}
}