设计模式 十三、备忘录模式
作者:互联网
备忘录 Memento 模式:
在不破坏封装性的前提下,捕获一个对象的内在状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来的状态。
Originator 发起人:
负责创建一个备忘录 Memento 用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。
Originator 可根据需要决定 Memento 储存 Originator 的哪些内部状态。
Memento 备忘录:
负责存储 Originator 对象的内部状态, 并可防止 Originator 以外的其他对象访问备忘录 Memento ,备忘录有两个接口, Caretaker 只能看到窄接口,他只能将备忘录传递给其他对象, Originator可以看到宽接口,允许他访问返回到先前状态所需的所有数据。
Caretaker 管理者:
负责保存好备忘录 Memento ,不能对备忘录的内容进行操作或修改。
备忘录模式把要保存的细节封装在了 Memnto 中,哪一天要改细节也不需要影响客户端。
备忘录模式适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性也只是众多属性中的一小部分时, Originator 可以根据保存的 Memento 信息还原到前一状态。
//备忘录
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
//管理者
public class Caretaker {
private Memento memento;
//得到或设置备忘录
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
//发起人 类
public class Originator {
private String state; //需要保存的属性,可以多个
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
//创建备忘录,将当前需要保存的信息导入并实例化出一个 Memento 对象
public Memento CreateMemento() {
return new Memento(state);
}
//恢复备忘录,将 Memento 导入并将相关数据恢复
public void SetMemnto(Memento memento) {
state = memento.getState();
}
public void Show() {
System.out.println(state);
}
public static void main(String[] args) {
//初始化发起人和初始状态
Originator originator = new Originator();
originator.setState("满血");
originator.Show();
//保存状态,由于有了封装性,可以隐藏发起人 Originator 的细节
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.CreateMemento());
//更新了状态
originator.setState("残血");
originator.Show();
//恢复备忘录状态
originator.SetMemnto(caretaker.getMemento());
originator.Show();
}
}
标签:Originator,originator,十三,备忘录,state,设计模式,public,Memento 来源: https://blog.csdn.net/weixin_45401129/article/details/114629461