设计模式-备忘录模式
备忘录模式(Memento Pattern)是计算机科学中的一种行为设计模式。它提供了一种在不破坏封装性的前提下,捕获和恢复对象内部状态的方法。这种模式主要用于在用户需要回滚到对象的某个先前状态时,能够实现状态的还原。
在备忘录模式中,主要涉及到三个角色:
- Originator(原发器):这是需要保存其内部状态的对象。它负责创建和恢复备忘录数据,同时也可以根据需要改变自己的状态。
- Memento(备忘录):备忘录对象存储了原发器对象的内部状态。它的接口通常只允许原发器对象读取备忘录保存的状态,而对其他对象则隐藏这些状态细节,以保护原发器对象的封装性。
- Caretaker(管理者):负责保存和管理备忘录对象,但不能访问或操作备忘录所保存的具体状态信息。当需要恢复原发器对象的先前状态时,管理者将合适的备忘录对象传递给原发器。
代码结构图
/**
* 发起人
*/
public class Originator {
/** 状态 */
private String state;
/** 输出方法 */
public void show(){
System.out.println("当前状态是:" + this.state);
}
/** 恢复备忘录 */
public void recoveryMemento(Memento memento){
this.state = memento.getState();
}
/** 创建备忘录 */
public Memento createMemento(){
return new Memento(this.state);
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
/**
* 备忘录
*/
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
/**
* 管理者
*/
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
/**
* 备忘录客户端
*/
public class MemoDemo {
public static void main(String[] args) {
// 创建发起者 赋值状态属性
Originator originator = new Originator();
originator.setState("状态-良好");
originator.show();
// 创建管理者
Caretaker caretaker = new Caretaker();
// 管理者-创建备忘录
caretaker.setMemento(originator.createMemento());
// 发起者修改状态
originator.setState("状态-很困");
originator.show();
// 管理者-恢复状态
originator.recoveryMemento(caretaker.getMemento());
originator.show();
}
}
打印结果:
Connected to the target VM, address: '127.0.0.1:43988', transport: 'socket'
当前状态是:状态-良好
当前状态是:状态-很困
当前状态是:状态-良好
Disconnected from the target VM, address: '127.0.0.1:43988', transport: 'socket'