设计模式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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值