十二、备忘录模式

菜鸟骑士挑战Boss,无奈实力悬殊至饮恨而终。不过好在单挑Boss前有“存档”,“嘿嘿,Boss,我们再来打过!”

 备忘录模式用于记录某对象某一时刻的状态,比如对象在该时刻的某一属性值,便于读取“进度”。

 基本结构如下
 ①、需要被记录的对象(菜鸟骑士)
 一些属性Fields
 备忘录的引用
 
 ②、备忘录
 属性Memory(用于记忆对象的属性)

 ③、备忘中心
 备忘录的引用

 Ps:最主要的操作在于,对象将“存储自身信息的备忘”传递给备忘中心

 实例代码: 以骑士单挑Boss为例
 ①、需要被记录的对象#########################################

/**
 *	游戏角色
 */
public class GameRole {
	public int life;	//生命力
	public int attack;  //攻击力
	public int defense; //防御力
	
	public Memento memento; //备忘录
	
	public Memento createMemento(){ //创建备忘
		return new Memento(life,attack,defense); //通过备忘的构造方法将属性备份
	}
	
	public GameRole(){//初始值,状态全满
		this.life = 100;
		this.attack = 100;
		this.defense = 100;
	}
	
	public void afterFight(){//战斗后
		this.life = 0;
		this.attack = 0;
		this.defense = 0;
	}
	
	public void getHistory(Center c){ //读取进度,取出备忘中心的备忘,并将属性恢复
		this.life = c.memento.getStatu()[0];  
		this.attack = c.memento.getStatu()[1];
		this.defense = c.memento.getStatu()[2];
	}
	
	public void showStatus(){ //状态展示
		System.out.println("生命力:"+life);
		System.out.println("攻击力:"+attack);
		System.out.println("防御力:"+defense);
	}
}


 ②、备忘录#########################################

/**
 *	备忘录 
 */
public class Memento {
	private int[] statu; //属性值
	
	public Memento(int...statu){ //构造函数记忆属性值
		this.statu = statu;
	}

	public int[] getStatu() {
		return statu;
	}

	public void setStatu(int[] statu) {
		this.statu = statu;
	}
}


 ③、备忘中心#########################################

/**
 *	备忘中心 
 */
public class Center {
	public Memento memento; //备忘录
}


 测试方法:

public class Test {
	public static void main(String[] args) throws Exception {
		GameRole knight = new GameRole();
		System.out.println("——战斗前——");
		knight.showStatus();
		
		Center c = new Center();
		c.memento = knight.createMemento();
		
		System.out.println("——战斗后——");
		knight.afterFight();
		knight.showStatus();
		
		System.out.println("——读取进度——");
		knight.getHistory(c);
		knight.showStatus();
	}
}


运行结果:

 ——战斗前——
 生命力:100
 攻击力:100
 防御力:100
 ——战斗后——
 生命力:0
 攻击力:0
 防御力:0
 ——读取进度——
 生命力:100
 攻击力:100
 防御力:100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值