備忘錄模式(Memento)
阿新 • • 發佈:2017-06-17
ring 信息 out 根據 string 歷史 role 還原 html
備忘錄模式:在不破壞封裝性的前提下,捕捉一個對象的內部狀態,並在改對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。
備忘錄模式比較適合功能比較復雜的,但需要維護或記錄屬性歷史的類。或者需要保存的屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memento信息還原到前一狀態。
public class Role { private int blood; //血量 private int mana; //藍量 public int getBlood() { return blood; } publicvoid setBlood(int blood) { this.blood = blood; } public int getMana() { return mana; } public void setMana(int mana) { this.mana = mana; } public Role(int blood, int mana) { this.blood = blood; this.mana = mana; } //之前的狀態 publicvoid before() { System.out.println("血量:"+getBlood()+"\t"+"藍量:"+getMana()); }
public class Memento { private int blood; //血量 private int mana; //藍量 public int getBlood() { return blood; } public void setBlood(int blood) { this.blood = blood; }public int getMana() { return mana; } public void setMana(int mana) { this.mana = mana; } public Memento(int blood, int mana) { this.blood = blood; this.mana = mana; } }
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
public class MementoTest { public static void main(String[] args) { Role role=new Role(100,100); System.out.println("大戰Boss之前"); role.before(); Caretaker caretaker=new Caretaker(); Memento memento=role.after(); caretaker.setMemento(memento); role.setBlood(20); role.setMana(10); System.out.println("大戰Boss之後"); role.before(); } }
http://www.cnblogs.com/S2223/p/6053427.html
備忘錄模式(Memento)