http://www.books.com.tw/products/0010750585
chap23.
備忘錄模式 Memento
目的:將一個物件的內部狀態儲存在另外一個備忘錄物件中,備忘錄物件可用來還原物件狀態
package com.ssc24.chap23.demo01;
public class GameRole {
private int hp = 100;
private int atk = 100;
private int def = 100;
private String name = "第六天魔王";
public RoleStateMemo save() {
return new RoleStateMemo(hp,atk,def);
}
public void fight() {
hp = 30;
System.out.println(name + "剩下 30% 血量,出大招把隊伍打的半死");
}
public void stateDisplay() {
System.out.println(name + " 的狀態:");
System.out.print("hp=" + hp);
System.out.print(" ,atk=" + atk);
System.out.print(" ,def=" + def);
}
public void load(RoleStateMemo memo) {
this.hp = memo.getHp();
this.atk = memo.getAtk();
this.def = memo.getDef();
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
public int getDef() {
return def;
}
public void setDef(int def) {
this.def = def;
}
}
package com.ssc24.chap23.demo01;
import java.util.ArrayList;
import java.util.List;
public class RoleStateCareTaker {
public List<RoleStateMemo> saves = new ArrayList<RoleStateMemo>();
public RoleStateMemo getSave() {
return saves.get(0);
}
public void setSave(RoleStateMemo memo) {
saves.add(0,memo);
}
}
package com.ssc24.chap23.demo01;
public class RoleStateMemo {
private int hp;
private int atk;
private int def;
public RoleStateMemo(int hp,int atk,int def) {
this.hp = hp;
this.atk = atk;
this.def = def;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
public int getDef() {
return def;
}
public void setDef(int def) {
this.def = def;
}
}
package com.ssc24.chap23.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
public class GameRoleTest {
@Test
public void test() {
GameRole boss = new GameRole();
boss.stateDisplay();
System.out.println("使用複雜的神秘小技巧");
boss.setAtk(60);
RoleStateCareTaker rsc = new RoleStateCareTaker();
rsc.setSave(boss.save());
boss.stateDisplay();
boss.fight();
boss.stateDisplay();
boss.load(rsc.getSave());
System.out.println("不行不行,那個時間點該先回滿血,讀檔重打");
boss.stateDisplay();
}
} /** 第六天魔王 的狀態: hp=100 ,atk=100 ,def=100使用複雜的神秘小技巧 第六天魔王 的狀態: hp=100 ,atk=60 ,def=100第六天魔王剩下 30% 血量,出大招把隊伍打的半死 第六天魔王 的狀態: hp=30 ,atk=60 ,def=100不行不行,那個時間點該先回滿血,讀檔重打 第六天魔王 的狀態: hp=100 ,atk=60 ,def=100 **/