备忘录模式

一、背景

       记得以前玩游戏的时候,在打大boss之前,都会一路打小兵,打小boss,最后才会遇到大boss。但是我们可能不会一下打到大boss那里,中途可能有事或休息一下,那下次再来的时候我不可能再重头开始打吧,那样玩家肯定都不会再玩这款游戏了。那怎么办呢?当然是把我们玩的状态通过备忘录保存下来啊,下次再玩的时候读取备忘录的状态继续从我们之前停下的地方开始玩。这既是我们的备忘录模式。

二、概念 

      备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。

三、代码示例

/**
 * 原始对象类(备忘录发起角色)
 */
class Original {
	private String name;

	public Original(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Memento createMemento() {// 创建备忘录方法
		return new Memento(name);
	}

	public void restore(Memento memento) {// 恢复方法
		this.name = memento.getValue();
	}
}

/**
 * 备份类(备忘录角色)
 */
class Memento {
	private String value;

	public Memento(String value) {
		this.value = value;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
}

/**
 *存储类(备忘录管理角色)
 */
class Storage {
	private Memento memento;

	public Storage(Memento memento) {
		this.memento = memento;
	}

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}
}
public class MementoPatternDemo {
	
	public static void main(String[] args) {
		Original original = new Original("hello");// 创建原始对象
		Storage storage = new Storage(original.createMemento());// 创建备忘录
		System.out.println("初始化状态为:" + original.getName());
		// 修改原始类对象的属性
		original.setName("Hi");
		System.out.println("修改后状态为:" + original.getName());

		// 恢复原始状态
		original.restore(storage.getMemento());
		System.out.println("恢复后状态为:" + original.getName());
	}
}

四、总结

      1.备忘录模式由 备忘录发起角色 、备忘录角色及备忘录管理角色构成。发起角色负责创建和读取备忘录,备忘录负责保存发 起角色的状态,备忘录管理角色负责存储备忘录。

      2.备忘录模式适用于需要备份恢复的场景中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值