目錄遊戲魚色有攻擊力和防禦力,在大戰 boss 前儲存自身的狀態(攻擊力和防禦力),當大戰 boss 後攻擊力和防禦萬下降,從備忘錄物件恢復到大戰前的狀態
傳統方案
傳統方案問題分析
原理類圖
示例**
/**
* 源物件
*/public class originator
public void setstate(string state)
public memento createmementor()
public void revertstatefrommementor(memento memento)
}/**
* 備忘錄物件
*/public class memento
public string getstate()
}/**
* 守護者物件
*/public class caretaker
public memento getmemento(integer index)
}
測試**
originator originator = new originator();
caretaker caretaker = new caretaker();
originator.setstate("當前狀態:" + " 狀態#1 血量 100 ");
caretaker.addmemento(originator.createmementor());
system.out.println(originator.getstate());
originator.setstate("當前狀態:" + " 狀態#2 血量 80 ");
caretaker.addmemento(originator.createmementor());
system.out.println(originator.getstate());
originator.setstate("當前狀態:" + " 狀態#3 血量 60 ");
caretaker.addmemento(originator.createmementor());
system.out.println(originator.getstate());
// 恢復到狀態1
originator.revertstatefrommementor(caretaker.getmemento(0));
system.out.println("恢復狀態:" + originator.getstate());
//當前狀態: 狀態#1 血量 100
//當前狀態: 狀態#2 血量 80
//當前狀態: 狀態#3 血量 60
//恢復狀態:當前狀態: 狀態#1 血量 100
備忘錄模式中的角色和職責uml 類圖
備忘錄物件
public class memento
public integer getvit()
public void setvit(integer vit)
public integer getdef()
public void setdef(integer def)
}
守護者物件
public class caretaker
public void setmemento(memento memento)
}
遊戲角色物件
public class gamerole
public void setvit(integer vit)
public integer getdef()
public void setdef(integer def)
public memento creatememento()
public void recovermemento(memento memento)
public void display()
}
測試**
system.out.println("*****=大戰前狀態*****=");
gamerole gamerole = new gamerole();
gamerole.setvit(100);
gamerole.setdef(100);
caretaker caretaker = new caretaker();
caretaker.setmemento(gamerole.creatememento());
gamerole.display();
system.out.println("*****=大戰後狀態*****=");
gamerole.setvit(10);
gamerole.setdef(10);
gamerole.display();
system.out.println("*****=從備忘錄物件恢復到大戰前的狀態*****=");
gamerole.recovermemento(caretaker.getmemento());
gamerole.display();
//*****=大戰前狀態*****=
//遊戲角色當前攻擊力:100,當前防禦力:100
//*****=大戰後狀態*****=
//遊戲角色當前攻擊力:10,當前防禦力:10
//*****=從備忘錄物件恢復到大戰前的狀態*****=
//遊戲角色當前攻擊力:100,當前防禦力:100
優點缺點其他 18 備忘錄模式
package memento 以前的小霸王遊戲是不是可以儲存遊戲進度?是的 那是怎麼實現的呢?應該是.來 先簡單實現一下 public class commonly class gamerole 獲得初始狀態 public void getinitstate 戰鬥 public void figh...
18 備忘錄模式
在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存該狀態。這樣以後就可將該物件恢復到原先儲存的狀態 理解originator 原發器,使用備忘錄來儲存某個時刻原發器自身的狀態,也可以使用備忘錄來恢復內部狀態 memento 備忘錄,儲存原發器物件的內部狀態,原發器外部的物件不應該能訪問...
設計模式之18 備忘錄模式Memento
有時候我們需要記錄乙個物件的狀態,用於該物件在某些狀況下的恢復,這種模式 我們稱之為備忘錄模式。發起人 originator 需要備份的物件,將自身的屬性資訊拷貝到乙個備忘錄物件,並能夠通過備忘錄中的屬性資訊 進行恢復 備忘錄 memento 儲存發起人狀態,提供set,get介面進行狀態訪問 管理...