设计模式之备忘录模式

备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可以将该对象恢复到原先保存的状态,属于行为型模式。

组成

备忘录模式由发起人 Originator、备忘录 Memento 和管理者 Caretaker 组成。

其中 Originator 是持有状态的对象,可以创建备忘录 Memento 来记录状态,并可以使用备忘录恢复到之前的状态;Memento 负责存储 Originator 的内部状态;Caretaker 负责保存备忘录 Memento。

优点

提供了一种状态恢复的实现机制。

实现了信息的封装,备忘录来保存发起人的状态,使发起人复杂的内部信息对其他对象透明。

简化了发起人 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
public class Originator {

private String status;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public Memento createMemento() {
return new Memento(status);
}

public void recoveryByMemento(Memento memento) {
this.status = memento.getStatus();
}

public void show() {
System.out.println("status = " + status);
}
}

public class Memento {

private String status;

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

public String getStatus() {
return status;
}
}

public class Caretaker {

private Memento memento;

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}
}

public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setStatus("good");
originator.show();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
originator.setStatus("bad");
originator.show();
originator.recoveryByMemento(caretaker.getMemento());
originator.show();
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2016-2020 姜越

谢谢老板

支付宝
微信