欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

备忘录模式

程序员文章站 2022-05-03 21:39:56
...
备忘录模式有叫备份模式, 相信这个概念很好理解。 大家都玩过游戏, 杀过怪, 升过级。。。 在被Boss杀死之后只需要恢复到死之前的那一关就可以了。

那我们来看看是怎样实现的

先看看这个游戏, 游戏可以存档和恢复
public class Game {
	private String level;

	public String getLevel() {
		return level;
	}

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

	public IArchive createArchive() {
		return new Archive(this.level);
	}

	public void restoreArchive(IArchive archive) {
		this.level = ((Archive) archive).getLevel();
	}
}



再定义这个“档”
// 空接口
public interface IArchive {
}

// 简单实现, 仅包含游戏级别的信息
public class Archive implements IArchive {

	private String level;

	public String getLevel() {
		return level;
	}

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

	public Archive(String level) {
		this.level = level;
	}
}


定义好了“档”, 还需要一个存档器 - ArchiveManager
public class ArchiveManager {
	private Map<String, IArchive> archiveList = new HashMap<String, IArchive>();

	public void put(String name, IArchive archive) {
		this.archiveList.put(name, archive);
	}

	public IArchive get(String name) {
		return archiveList.get(name);
	}
}


同样很简单, 就是一个Map

都好了就看看客户端代码吧:
public class Client {
	public static void main(String[] args) {
		Game game = new Game();
		game.setLevel("60级");
		System.out.println("游戏开始了, 一切很顺利, 升到60级了");

		game.setLevel("0级");
		System.out.println("被大Boss打死了,重新开始。 完了, 没有备份, 哭都哭不出来。。。");

		System.out.println("没办法, 重新从0级开始");
		game.setLevel("1级");
		System.out.println("吸取教训, 每升一级就备份一下");
		ArchiveManager archiveManager = new ArchiveManager();
		archiveManager.put("1级", new Archive(game.getLevel()));

		System.out.println("继续打怪。。。");

		System.out.println("一不小心分神了, 竟然被两级的怪打死了。。。");
		System.out.println("还好有备份,恢复一下就好");
		game.setLevel(((Archive) archiveManager.get("1级")).getLevel());

		System.out.println("游戏恢复到了" + game.getLevel());
	}
}


是不是很简单明了:
引用
游戏开始了, 一切很顺利, 升到60级了
被大Boss打死了,重新开始。 完了, 没有备份, 哭都哭不出来。。。
没办法, 重新从0级开始
吸取教训, 每升一级就备份一下
继续打怪。。。
一不小心分神了, 竟然被两级的怪打死了。。。
还好有备份,恢复一下就好
游戏恢复到了1级