作用:类似游戏里面人物血条,命,装备等存档,可以返回到存档点,该设计模式常常用于,功能比较复杂的,但是需要维护或者记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分,Originator(发起人)可以根据保存的备忘录信息还原到前一个状态。
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。
1、Originator(发起人):负责创建备忘录,用于记录当前时刻他内部的状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定备忘录存储Originator的哪些内部状态。
2、Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator 以外的其他对象访问备忘录。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他的对象,Originator能够看到一个宽接口,允许他访问返回到先前状态所需要的所有数据
3、Caretaker(管理者) :负责保存好备忘录,不能对备忘录的内容进行操作或者检查、
针对游戏存档,‘’游戏人物‘’的类就是Originator,‘’游戏人物‘’的实例‘备份’来做备忘录,如果要保存全部信息,可以使用clone方式实现备忘录,但是这会使得对上层应用开放了Originator(发起人)的全部(public)接口。这样保存不合适。
4、要是保存部分的信息而不是全部信息,我们可以使用一个独立的备忘录,他拥有需要保存的信息的属性。所以一般情况创建一个独立的备忘录
1、备忘录模式
1、发起人(Originator)
class Originator {
//状态
private String state;
public String getState(){
return this.state;
}
public void setState(String value){
this.state = value;
}
//显示数据
public void show(){
System.out.println("State:"+this.state);
}
//创建备忘录
public Memento createMemento(){