您的位置:首页 > 其它

【设计模式】18、备忘录模式

2016-03-06 22:23 387 查看


package com.shejimoshi.behavioral.Memento;

/**
* 功能:游戏角色
* 时间:2016年3月6日下午9:39:18
* 作者:cutter_point
*/
public class GameRole
{
private int attackPower;    //攻击力
private int blood;    //血量
private int defense;    //防御力

public void getInitState()
{
attackPower = 100;
blood = 100;
defense = 100;
}

public void display()
{
System.out.println("攻击力:" + attackPower + "\t生命力:" + blood + "\t防御力:" + defense);
}

//保存当前存储点
public Memento saveState()
{
return new Memento(attackPower, blood, defense);
}

public void recoveryState(Memento memento)
{
this.attackPower = memento.getAttackPower();
this.blood = memento.getBlood();
this.defense = memento.getDefense();
}

public void fight()
{
this.attackPower -= 40;
this.blood -= 40;
this.defense -= 60;
}
}


package com.shejimoshi.behavioral.Memento;

/**
* 功能:存储状态管理者
* 时间:2016年3月6日下午10:10:23
* 作者:cutter_point
*/
public class RoleStateCaretaker
{
private Memento memento;

public Memento getMemento()
{
return memento;
}

public void setMemento(Memento memento)
{
this.memento = memento;
}

}


package com.shejimoshi.behavioral.Memento;

/**
* 功能:游戏存储点,备忘录
* 时间:2016年3月6日下午9:46:03
* 作者:cutter_point
*/
public class Memento
{
private int attackPower;    //攻击力
private int blood;    //血量
private int defense;    //防御力

public Memento(int attackPower, int blood, int defense)
{
this.attackPower = attackPower;
this.blood = blood;
this.defense = defense;
}

public int getAttackPower()
{
return attackPower;
}

public void setAttackPower(int attackPower)
{
this.attackPower = attackPower;
}

public int getBlood()
{
return blood;
}

public void setBlood(int blood)
{
this.blood = blood;
}

public int getDefense()
{
return defense;
}

public void setDefense(int defense)
{
this.defense = defense;
}

}


package com.shejimoshi.behavioral.Memento;

/**
* 功能:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先的状态
* 适用:必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态
*             如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象封装信
* 时间:2016年3月6日下午8:58:55
* 作者:cutter_point
*/
public class Test
{
public static void main(String[] args)
{
//开启游戏,初始化状态
GameRole gr = new GameRole();
gr.getInitState();//初始化状态
gr.display();

//保存进度点
RoleStateCaretaker rsc = new RoleStateCaretaker();
rsc.setMemento(gr.saveState());

//大战boss
gr.fight();
gr.display();

//恢复状态
gr.recoveryState(rsc.getMemento());
gr.display();

}
}


攻击力:100	生命力:100	防御力:100
攻击力:60	生命力:60	防御力:40
攻击力:100	生命力:100	防御力:100


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: