设计模式——备忘录模式

什么是备忘录模式

备忘录是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象外部保存状态。而状态保存的地方就是备忘录对象,并且再创建一个备忘录的管理类来管理一系列的状态,在用户操作的时候,用户不与备忘录直接耦合而与备忘录的管理类相耦合。相应的我们就可以做一些操作比如回滚,撤销等。

备忘录的UML图

UML

originator是指需要保存状态的对象,Memento是聚合了状态的备忘录对象,CareTaker是存储了备忘录对象集合的备忘录管理类。

在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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

public class Originator {

private String state;

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

public Memento saveToMemento() {
return new Memento(this.state);
}

public void getStateFromMemento(Memento memento) {
this.state = memento.getState();
}

public void display() {
System.out.println("当前状态为:" + this.state);
}

}


public class Memento {

private String state;

public Memento(String state) {
this.state = state;
}

public String getState() {
return state;
}
}

public class CareTaker {

private List<Memento> mementoList = new ArrayList<>();

public void addMemento(Memento memento) {
mementoList.add(memento);
}

public Memento getMemento(int index) {
return mementoList.get(index);
}
}

public class Client {

public static void main(String[] args) {

Originator originator = new Originator();

CareTaker careTaker = new CareTaker();

originator.setState("状态1");
careTaker.addMemento(originator.saveToMemento());

originator.display();

originator.setState("状态2");
careTaker.addMemento(originator.saveToMemento());

originator.display();

originator.setState(careTaker.getMemento(0).getState());

originator.display();

}
}
-------------本文结束感谢阅读-------------