大话设计模式_备忘录模式

以玩游戏为例,大战boss前保存角色状态,大战过boss之后恢复角色大战boss之前的状态。

package com.wzs.design;

/**
 * 大话设计模式--page186 备忘录模式
 * 
 * @author Administrator
 * 
 */
public class MemoMode {
	public static void main(String[] args) {
		// 大战boss前
		GameRole lixiaoyao = new GameRole();
		lixiaoyao.getInitState();
		lixiaoyao.stateDisplay();

		// 保存进度
		RoleStateCaretaker stateAdmin = new RoleStateCaretaker();
		stateAdmin.memento = lixiaoyao.saveState();

		// 大战boss,损耗严重
		lixiaoyao.fight();
		lixiaoyao.stateDisplay();

		// 回复之前状态
		lixiaoyao.recoveryState(stateAdmin.memento);
		lixiaoyao.stateDisplay();
	}
}

/*
 * 游戏角色
 */
class GameRole {
	private int vit; // 生命力
	private int atk; // 攻击力
	private int def; // 防御力

	// 状态显示
	public void stateDisplay() {
		System.out.println("角色当前状态:");
		System.out.println("生命力:" + this.vit);
		System.out.println("攻击力:" + this.atk);
		System.out.println("防御力:" + this.def);
		System.out.println();
	}

	// 获得初始状态
	public void getInitState() {
		this.vit = 100;
		this.atk = 100;
		this.def = 100;
	}

	// 战斗过后状态
	public void fight() {
		this.vit = 0;
		this.atk = 0;
		this.def = 0;
	}

	// 保存角色状态
	public RoleStateMemento saveState() {
		return new RoleStateMemento(vit, atk, def);
	}

	// 恢复角色状态
	public void recoveryState(RoleStateMemento memento) {
		this.vit = memento.getVit();
		this.atk = memento.getAtk();
		this.def = memento.getDef();
	}

	public int getVit() {
		return vit;
	}

	public void setVit(int vit) {
		this.vit = vit;
	}

	public int getAtk() {
		return atk;
	}

	public void setAtk(int atk) {
		this.atk = atk;
	}

	public int getDef() {
		return def;
	}

	public void setDef(int def) {
		this.def = def;
	}
}

/*
 * 角色状态存储箱
 */
class RoleStateMemento {
	private int vit;
	private int atk;
	private int def;

	public RoleStateMemento(int vit, int atk, int def) {
		this.vit = vit;
		this.atk = atk;
		this.def = def;
	}

	public int getVit() {
		return vit;
	}

	public void setVit(int vit) {
		this.vit = vit;
	}

	public int getAtk() {
		return atk;
	}

	public void setAtk(int atk) {
		this.atk = atk;
	}

	public int getDef() {
		return def;
	}

	public void setDef(int def) {
		this.def = def;
	}
}

/*
 * 角色状态管理者
 */
class RoleStateCaretaker {
	public RoleStateMemento memento;

	public RoleStateMemento getMemento() {
		return memento;
	}

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

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值