设计模式练习(16)——备忘录模式

备忘录模式

一、题目:

某软件公司正在开发一款网游,为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景,如果在后续游戏过程中,玩家角色“不幸牺牲”,玩家可以返回到先前保存的场景,从恢复点开始重新游戏,试用备忘录模式实现。
(1)绘制备忘录模式结构视图
(2)给出实例类图并实现代码

二、所用模式结构视图:

设计模式练习(16)——备忘录模式_第1张图片

三、实例类图:

设计模式练习(16)——备忘录模式_第2张图片

四、实例实现代码:

(因为区分,所以在类的前面加了Gj19)

原发器

package gjMementoPattern;

/**
 * 原发器
 * @author gong
 *
 */
public class Gj19Originator {

    private String state;

    public Gj19Originator(){

    }
    //创建一个备忘录对象
    public Gj19Memento createMemento(){
        return new Gj19Memento(this);
    }
    //根据备忘录对象恢复原发器状态  
    public void restoreMemento(Gj19Memento m) {  
        this.state = m.getState();  
    }
    public String getState() {
        return this.state;
    }
    public void setState(String state) {
        this.state = state;
    }  

    public  void show(){
        System.out.println("-------"+this.state+"-------");
    }

}

备忘录类

package gjMementoPattern;

/**
 * 备忘录类
 * 
 * @author gong
 *
 */
public class Gj19Memento {

    private String state;


    public Gj19Memento(Gj19Originator gj19Originator) {
        state = gj19Originator.getState();
    }

    public String getState() {
        return this.state;
    }

    public void setState(String state) {
        this.state = state;
    }

}

负责人

package gjMementoPattern;
/**
 * 负责人
 * @author gong
 *
 */
public class Gj19Caretaker {

    private Gj19Memento gj19Memento;

    public void setGj19Memento(Gj19Memento gj19Memento) {
        this.gj19Memento = gj19Memento;
    }

    public Gj19Memento getGj19Memento(){
        return gj19Memento;
    }


}

备忘录模式客户端

package gjMementoPattern;
/**
 * 备忘录模式客户端
 * @author gong
 *
 */
public class Client {
    public static void main(String[] args) {
        Gj19Originator gj19Originator = new Gj19Originator();

        Gj19Caretaker caretaker = new Gj19Caretaker();

        gj19Originator.setState("保存游戏之后的游戏恢复点");
        gj19Originator.show();
        System.out.println("============================="+"\n");
        //保存备忘录
        caretaker.setGj19Memento(gj19Originator.createMemento());
        //进行游戏
        gj19Originator.setState("天公不作美= =,您已经牺牲!");
        gj19Originator.show();

        System.out.println("============================="+"\n");
        //从备忘录中恢复
        gj19Originator.restoreMemento(caretaker.getGj19Memento());
        gj19Originator.show();
        System.out.println("============================="+"\n");
    }
}

五、运行结果:

设计模式练习(16)——备忘录模式_第3张图片

你可能感兴趣的:(设计模式)