首页 > 代码库 > 设计模式13---备忘录模式

设计模式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 BossPlaeyr status:GameOverPlaeyr status after restore:Before attack Boss

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

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

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

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