设计模式-18-备忘录模式

来源:互联网 发布:检察院 大数据 公司 编辑:程序博客网 时间:2024/06/06 10:57

备忘录模式: 备忘录模式是一种给我们的软件提供后悔药的机制,通过它可以使系统恢复到某一特定的历史状态
备忘录模式

游戏角色类

package com.actionPattern.memorandum.edition1;/* * 游戏角色类 */public class Role {    /**血量*/    private int bloodFlow;    /**蓝量*/    private int magicPoint;    public Role(int bloodFlow,int magicPoint){        this.bloodFlow = bloodFlow;        this.magicPoint = magicPoint;    }    public int getBloodFlow() {        return bloodFlow;    }    public void setBloodFlow(int bloodFlow) {        this.bloodFlow = bloodFlow;    }    public int getMagicPoint() {        return magicPoint;    }    public void setMagicPoint(int magicPoint) {        this.magicPoint = magicPoint;    }    /**     * 展示角色当前状态     * @return void     */    public void display(){        System.out.println("用户当前状态:");        System.out.println("血量:" + getBloodFlow() + ";蓝量:" + getMagicPoint());    }    /**     * 保持存档、当前状态     * @return     * @return Memento     */    public Memento saveMemento(){        return new Memento(getBloodFlow(), getMagicPoint());    }    /**     * 恢复存档     * @param memento     * @return void     */    public void restoreMemento(Memento memento){        this.bloodFlow = memento.getBloodFlow();        this.magicPoint = memento.getMagicPoint();    }}

备忘录:Memento

package com.actionPattern.memorandum.edition1;/* * 备忘录:Memento */class Memento {    private int bloodFlow;    private int magicPoint;    public int getBloodFlow() {        return bloodFlow;    }    public void setBloodFlow(int bloodFlow) {        this.bloodFlow = bloodFlow;    }    public int getMagicPoint() {        return magicPoint;    }    public void setMagicPoint(int magicPoint) {        this.magicPoint = magicPoint;    }    public Memento(int bloodFlow,int magicPoint){        this.bloodFlow = bloodFlow;        this.magicPoint = magicPoint;    }}

测试

package com.actionPattern.memorandum.edition1;/* * 测试 */public class Client {    public static void main(String[] args) {        //打BOSS之前:血、蓝全部满值        Role role = new Role(100, 100);        System.out.println("----------大战BOSS之前----------");        role.display();        Memento memento1 = role.saveMemento();//历史纪录1        //大战BOSS,快come Over了        role.setBloodFlow(40);        role.setMagicPoint(40);        System.out.println("----------大战BOSS1----------");        role.display();        Memento memento2 = role.saveMemento();//历史纪录2        role.setBloodFlow(20);        role.setMagicPoint(20);        System.out.println("----------------大战boss2----------");        role.display();        Memento memento3 = role.saveMemento();//历史纪录三        //恢复存档        role.restoreMemento(memento2);        System.out.println("----------恢复----------");        role.display();    }}