本文概述
- 好处
- 用法
- UML for Memento模式
- Memento模式的实现
备忘录模式也称为令牌。
撤消或退格或Ctrl + Z是编辑器中最常用的操作之一。 Memento设计模式用于实现撤消操作。这是通过在对象更改状态时保存其当前状态来完成的。
好处
- 它保留封装边界。
- 它简化了创建者。
- 大多数软件在撤消和重做操作中使用它。
- 它也用于数据库事务中。
文章图片
备忘录:
- 存储原始对象的内部状态。状态可以包括任意数量的状态变量。
- 备忘录必须具有两个接口, 即看守者的接口。该接口不得允许任何操作或对内存的存储的内部状态的任何访问, 并因此保持封装。另一个接口是发起者, 它允许发起者访问发起者恢复先前状态所必需的任何状态变量。
- 创建一个备忘录对象, 该对象将捕获发起者的内部状态。
- 使用memento对象恢复其先前状态。
- 负责保留备忘录。
- 备忘录对看守人是透明的, 看守人不得对其进行操作。
创建一个Originator类, 该类将使用Memento对象恢复其先前状态。
//This is a class.public class Originator {
private String state;
public void setState(String state){
this.state = state;
}
public String getState(){
return state;
}
public Memento saveStateToMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento Memento){
state = Memento.getState();
}
}// End of the Originator class.
第2步:
创建一个Memento类, 该类将存储Originator对象的内部状态。
//This is a class.public class Memento {
private String state;
public Memento(String state) {
this.state=state;
}
public String getState() {
return state;
}
}// End of the Memento class.
第三步:
创建一个负责维护Memento的Caretaker类。
//This is a class.import java.util.ArrayList;
import java.util.List;
public class Caretaker {
private List<
Memento>
mementoList = new ArrayList<
Memento>
();
public void add(Memento state){
mementoList.add(state);
}public Memento get(int index){
return mementoList.get(index);
}}// End of the Caretaker class.
步骤4:
创建一个MementoPatternDemo类。
//This is a class.public class MementoPatternDemo {
public static void main(String[] args) {Originator originator = new Originator();
Caretaker careTaker = new Caretaker();
originator.setState("State #1");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #2");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #3");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #4");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(2));
System.out.println("Third saved State: " + originator.getState());
}}
// End of the MementoPatternDemo class.
【备忘录模式】输出:
文章图片