备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
比如:Windows 里的 ctrl + z;浏览器的后退; 数据库的事务管理等
示例演示:
我们创建三个类,一个people类,包含一个status状态的字段,一个存储people状态的类,一个获取people状态的类
1
2
3
4
5
6
7
8
9
10
11
12package test.memento;
import lombok.Data;
public class People {
private String status;
public People(String status) {
this.status = status;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package test.memento;
import lombok.Data;
public class PeopleStatusSave {
private String status;
public People saveStatus() {
return new People(status);
}
public void getStatus(People people) {
status = people.getStatus();
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package test.memento;
import java.util.ArrayList;
import java.util.List;
public class PeopleRecover {
private List<People> peopleList = new ArrayList<>();
public void add(People people) {
peopleList.add(people);
}
public People get(int index) {
return peopleList.get(index);
}
}完成上述步骤,我们就可以开始演示了
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
29package test.memento;
public class MementoDemo {
public static void main(String[] args) {
PeopleStatusSave peopleStatus = new PeopleStatusSave();
PeopleRecover peopleRecover = new PeopleRecover();
peopleStatus.setStatus("11111");
peopleRecover.add(peopleStatus.saveStatus());
peopleStatus.setStatus("22222");
peopleRecover.add(peopleStatus.saveStatus());
peopleStatus.setStatus("33333");
peopleRecover.add(peopleStatus.saveStatus());
peopleStatus.setStatus("44444");
peopleRecover.add(peopleStatus.saveStatus());
System.out.println("current: " + peopleStatus.getStatus());
peopleStatus.getStatus(peopleRecover.get(0));
System.out.println("first: "+ peopleStatus.getStatus());
peopleStatus.getStatus(peopleRecover.get(1));
System.out.println("second: "+ peopleStatus.getStatus());
}
}运行结果:
1
2
3current: 44444
first: 11111
second: 22222
说明:
优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。