备忘录模式

在这里插入图片描述
以游戏存档演示备忘录模式。

package memento;

/**
 * 暗黑破坏神存档
 */
public class GameOriginer {
	
	int blood=100;
	
	int magic=100;
	
	String location="嗜血荒野";
	
	String equipment="赤手,光脚";

	public Memento storeGame() {
		return new Memento(this.getBlood(),
				this.getMagic(),this.getLocation(),this.getEquipment());
	}
	
	public void loadGame(Memento memento) {
		this.blood = memento.getBlood();
		this.magic = memento.getMagic();
		this.location = memento.getLocation();
		this.equipment = memento.getEquipment();
	}

	public int getBlood() {
		return blood;
	}

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

	public int getMagic() {
		return magic;
	}

	public void setMagic(int magic) {
		this.magic = magic;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public String getEquipment() {
		return equipment;
	}

	public void setEquipment(String equipment) {
		this.equipment = equipment;
	}

	@Override
	public String toString() {
		return "GameOriginer [blood=" + blood + ", magic=" + magic + ", location=" + location + ", equipment="
				+ equipment + "]";
	}
	
	
}

package memento;

public class Memento {
	
	int blood;
	
	int magic;
	
	String location;
	
	String equipment;
	
	public Memento(int blood, int magic, String location, String equipment) {
		super();
		this.blood = blood;
		this.magic = magic;
		this.location = location;
		this.equipment = equipment;
	}

	public int getBlood() {
		return blood;
	}

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

	public int getMagic() {
		return magic;
	}

	public void setMagic(int magic) {
		this.magic = magic;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public String getEquipment() {
		return equipment;
	}

	public void setEquipment(String equipment) {
		this.equipment = equipment;
	}
	
	
}

package memento;

import java.util.ArrayList;
import java.util.List;

public class CareTaker {
	
	List<Memento> mementoList=new ArrayList<>();

	public void store(Memento memento) {
		mementoList.add(memento);
	}
	
	public Memento load(int index) {
		return mementoList.get(index);
	}
	
}

package memento;

public class MementoTest {
	
	public static void main(String[] args) {
		
		CareTaker careTaker=new CareTaker();
		GameOriginer originer=new GameOriginer();
		System.out.println(originer);
		careTaker.store(originer.storeGame());
		
		originer.setBlood(500);
		originer.setMagic(500);
		originer.setLocation("沙漠");
		originer.setEquipment("皮甲");
		System.out.println(originer);
		careTaker.store(originer.storeGame());
		
		originer.setBlood(10000);
		originer.setMagic(10000);
		originer.setLocation("炼狱");
		originer.setEquipment("重甲");
		System.out.println(originer);
		
		originer.loadGame(careTaker.load(1));
		System.out.println(originer);
		originer.loadGame(careTaker.load(0));
		System.out.println(originer);
	}
}

打印结果:
GameOriginer [blood=100, magic=100, location=嗜血荒野, equipment=赤手,光脚]
GameOriginer [blood=500, magic=500, location=沙漠, equipment=皮甲]
GameOriginer [blood=10000, magic=10000, location=炼狱, equipment=重甲]
GameOriginer [blood=500, magic=500, location=沙漠, equipment=皮甲]
GameOriginer [blood=100, magic=100, location=嗜血荒野, equipment=赤手,光脚]

小结:
1.备忘录模式是一个比较简单的模式,用于备份Originer某一个时刻的状态。Memento是备份对象,CareTaker不能修改Memento,只能简单的保存和读取Memento。
2.与Command模式的区别:Command模式是通过反向操作undo方法进行回退,而memento模式则可以以历史状态进行回退。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值