0%

设计模式-备忘录模式

备忘录模式(Memento pattern),属于行为型模式,不破坏封闭的前提下,捕获一个对象的内部状态,并在对象之外保存,可以在适当的时候恢复。

结构

涉及到了三个角色,Originator(发起者)、Memento(备忘录)、Caretaker(管理者)

发起者

Originator,用于创建和使用备忘录,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
}
}

备忘录

Memento,用于存储发起者的内部状态,示例如下

1
2
3
4
5
6
7
8
9
10
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}

public String getState(){
return state;
}
}

管理者

Caretaker,负责管理备忘录,示例如下

1
2
3
4
5
6
7
8
9
class Caretaker {
private Memento memento;
public Memento getMemento(){
return memento;
}
public void setMemento(Memento memento){
this.memento = memento;
}
}

也可以存储list,多个快照。

客户端

对如上代码测试,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.setState("first");
caretaker.setMemento(originator.saveStateToMemento());
originator.setState("second");
System.out.println(originator.getState());
originator.getStateFromMemento(caretaker.getMemento());
System.out.println(originator.getState());
}
}

output:

1
2
second
first

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料