java备忘录模式

                                                                     

Originator(发起者):负责创建一个Memento,用以记录当前时刻它的内部状态,并可以使用Memento恢复他的内部状态。Originator可以根据需要决定Memento存储Orignator的哪些内部状态。

Memento(备忘录):负责存储Orignator对象的内部状态,并可以防止除了Orignator对象的其他对象访问备忘录(Memento)。备忘录有两个角色,CareTaker只能看到它的窄接口,它只能将备忘录传递给其他对象,Orignator能够看到一个宽接口,允许它访问返回到先前状态的所有数据。

CareTaker(备忘录管理者)负责保存备忘录Memento,不能对备忘录的数据进行操作和检查。

这里以游戏中的保存进度为例子:我们知道打boss之前需要保存进度,以防止失败之后还得重新开始,保存了进度之后,只需要从保存进度的位置,继续去打boss即可。

发起者角色类:

//原始角色
public class Role {

	int level = 1;// 等级
	int blood = 100;// 血量
	int attackability = 100;// 攻击力
	int defenceability = 100;// 防御力
	String Equipment = "木剑";// 装备
	String name;// 角色名称

	public Role(String name) {

		this.name = name;

	}

	public int getLevel() {
		return level;
	}

	public void setLevel(int level) {
		this.level = level;
	}

	public int getBlood() {
		return blood;
	}

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

	public int getAttackability() {
		return attackability;
	}

	public void setAttackability(int attackability) {
		this.attackability = attackability;
	}

	public int getDefenceability() {
		return defenceability;
	}

	public void setDefenceability(int defenceability) {
		this.defenceability = defenceability;
	}

	public String getEquipment() {
		return Equipment;
	}

	public void setEquipment(String equipment) {
		Equipment = equipment;
	}

	// 创建备忘录
	public RoleMemento CreateMemento() {

		return new RoleMemento(level, blood, attackability, defenceability,
				Equipment);
	}

	// 恢复保存的进度
	public void setMemento(RoleMemento memento) {

		this.level = memento.level;
		this.blood = memento.blood;
		this.attackability = memento.attackability;
		this.defenceability = memento.defenceability;
		this.Equipment = memento.Equipment;

	}

	public void ShowAbility() {

		System.out.println(name + "的属性:" + "血量:" + blood + "等级:" + level
				+ "攻击力:" + attackability + "防御力:" + defenceability + "装备:"
				+ Equipment);

	}
	
 //李逍遥打boss失败
	public void fightBoss() {

		this.level = 100;
		this.blood = 0;
		this.attackability = 1000;
		this.defenceability = 10000;
		this.Equipment = "无";

	}

}
备忘录:

//备忘录角色
public class RoleMemento {

	int level;
	int blood;
	int attackability;
	int defenceability;
	String Equipment;

	public RoleMemento(int level, int blood, int attackability,
			int defenceability, String Equipment) {

		this.level = level;
		this.blood = blood;
		this.attackability = attackability;
		this.defenceability = defenceability;
		this.Equipment = Equipment;

	}

	public int getLevel() {
		return level;
	}

	public int getBlood() {
		return blood;
	}

	public int getAttackability() {
		return attackability;
	}

	public int getDefenceability() {
		return defenceability;
	}

	public String getEquipment() {
		return Equipment;
	}

}
备忘录管理者:
public class CareTaker {

	// 备忘录 管理类
	RoleMemento memento;

	public CareTaker() {

	}

	public RoleMemento getMemento() {
		return memento;
	}

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

}

客户端:

public static void main(String[] args) {
		
		//李逍遥的初始属性
		Role  r=new Role("李逍遥");
	    r.ShowAbility();
	    //李逍遥经过一段时间的努力升级,打怪成长了
	    r.setLevel(100);
	    r.setBlood(10000);
	    r.setAttackability(10000);
	    r.setDefenceability(10000);
	    r.setEquipment("神器:轩辕剑");
		r.ShowAbility();//李逍遥目前的属性
		
	    //李逍遥要打boss了,需要保存进度,防止失败了,重新开始
	    CareTaker  c=new CareTaker();
	    c.memento=r.CreateMemento();

	   //李逍遥打boss失败了呢
	    r.fightBoss();
	    r.ShowAbility();//目前属性:李逍遥的属性:血量:0等级:100攻击力:1000防御力:10000装备:无   血量变0,神器掉落了,后果很严重啊,难道要重新开始
	    
	    //哎呀,幸好保存了进度,我们读取进度,继续打boss
	    r.setMemento(c.getMemento());
	    r.ShowAbility();//我李逍遥又满状态复活了,轩辕剑又回来了    李逍遥的属性:血量:10000等级:100攻击力:10000防御力:10000装备:神器:轩辕剑
	    

	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值