设计模式之-行为型-备忘录模式
# 概述
备忘录模式是一种行为性设计模式,它允许在不破坏封装的前提下,获取一个对象的内部状态,并在后续需要的时候将对象恢复到之前的状态。备忘录模式通常用于需要保存和恢复对象状态的实现中,例如实现撤销功能。
# 角色
备忘录模式主要由以下几个部分组成:
- 备忘录(Memento):用于存储对象的内部状态,不允许外部访问这个状态。
- 发起人(Originator):需要保存状态的对象,它可以创建一个备忘录来保存当前状态,并可以使用备忘录恢复状态。
- 管理者(Caretaker):负责管理备忘录对象的类,持有备忘录并在需要的时候将其传递给发起人,但不允许直接访问备忘录的内容。
# 使用场景
- 当需要保存对象的状态,以便在未来某个时刻能够恢复时。
- 当需要实现撤销操作,保证对象恢复到某一之前状态时。
- 当需要在对象的状态变化过程中提供快照时。
# 代码示例
// 备忘录类
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 发起人类
class Originator {
private String state;
public void setState(String state) {
this.state = state;
System.out.println("Originator: Setting state to " + state);
}
public Memento createMemento() {
return new Memento(state);
}
public void restore(Memento memento) {
state = memento.getState();
System.out.println("Originator: Restoring state to " + state);
}
}
// 管理者类
class Caretaker {
private Memento memento;
public void saveMemento(Originator originator) {
memento = originator.createMemento();
}
public void restoreMemento(Originator originator) {
originator.restore(memento);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.setState("State 1");
caretaker.saveMemento(originator);
originator.setState("State 2");
caretaker.restoreMemento(originator);
originator.setState("State 3");
caretaker.restoreMemento(originator);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 总结
备忘录模式通过提供一种机制来保存和恢复对象的状态,减少了对象状态的直接暴露。它在需要实现撤销功能或状态管理时特别有用。理解和掌握备忘录模式对于构建稳健的状态管理系统及实现灵活的对象状态恢复机制具有重要意义。
最后更新时间: 2024/12/26, 17:56:54