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

最长见于游戏状态保存,该模式不需要知道游戏具体状态,只是保存起来,等待需要的时候恢复。

UML图:

orininator 类是对memonto类的操作类。

Memonto是状态类,记录了游戏的数据状态。

CareTaker是保存memonto的类,不能修改memonto的内容!

/*存取的内容,包含很多载体。
 * 
 * */
public class StatusMemonto {
    
    private String _mStatus;

    public StatusMemonto(String status) {
        this._mStatus = status;
    }

    /**
     * @return the _mStatus
     */
    public String getStatus() {
        return _mStatus;
    }    
}
/*StatusTaker 只能存取Memonto,不能修改memonto的内容。
 * 
 * 
 * */
public class StatusTaker {
    
    private StatusMemonto _mMemonto;

    /**
     * @return the _mMemonto
     */
    public StatusMemonto get_mMemonto() {
        return _mMemonto;
    }

    /**
     * @param _mMemonto the _mMemonto to set
     */
    public void set_mMemonto(StatusMemonto _mMemonto) {
        this._mMemonto = _mMemonto;
    }
    
    
}
package com.jayfulmath.designpattern.memento;

public class Player {
    
    private String status;

    /**
     * @return the status
     */
    public String getStatus() {
        return status;
    }

    /**
     * @param status the status to set
     */
    public void setStatus(String status) {
        this.status = status;
    }    
    
    public StatusMemonto CreateMemontoStatus()
    {
        return new StatusMemonto(status);
    }
    
    public void setMemonto(StatusMemonto memoto){
        this.status = memoto.getStatus();
    }
}
/*最长见于游戏状态保存,该模式不需要知道游戏具体状态,只是保存起来,等待需要的时候恢复。
 * 
 * 
 * */
public class MementoMain extends BasicExample {

    @Override
    public void startDemo() {
        // TODO Auto-generated method stub
        Player mPlayer = new Player();
        mPlayer.setStatus("Before attack Boss");
        
        System.out.println("Plaeyr status:"+mPlayer.getStatus());
        
        StatusTaker taker = new StatusTaker();
        taker.set_mMemonto(mPlayer.CreateMemontoStatus());
        
        
        mPlayer.setStatus("GameOver");
        System.out.println("Plaeyr status:"+mPlayer.getStatus());
        
        mPlayer.setMemonto(taker.get_mMemonto());
        System.out.println("Plaeyr status after restore:"+mPlayer.getStatus());
        
    }

}

运行结果:

Plaeyr status:Before attack Boss
Plaeyr status:GameOver
Plaeyr status after restore:Before attack Boss

代码非常简单,但是经常会用到该模式。

该模式适用于功能比较复杂,但需要维护历史记录属性类。

当角色状态无效时,可以使用这个方式还原到有效的状态!

posted on 2014-12-16 10:51  Joyfulmath  阅读(209)  评论(0编辑  收藏  举报

导航