1. 程式人生 > >備忘錄模式(Memento)

備忘錄模式(Memento)

ring 信息 out 根據 string 歷史 role 還原 html

備忘錄模式:在不破壞封裝性的前提下,捕捉一個對象的內部狀態,並在改對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。

備忘錄模式比較適合功能比較復雜的,但需要維護或記錄屬性歷史的類。或者需要保存的屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memento信息還原到前一狀態。

public class Role {
    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 Role(int blood, int mana) { this.blood = blood; this.mana = mana; } //之前的狀態 public
void 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)