模式定义
备忘录模式在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
下图是该模式的类图:
一个生动的例子
备忘录类:
public class UserInfoMemento {
private String username;
private String password;
public UserInfoMemento(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
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
发起人类:
public class UserInfoOriginator {
private String username;
private String password;
public UserInfoOriginator(String username, String password) {
this.username = username;
this.password = password;
}
public UserInfoMemento getUserInfoMemento() {
return new UserInfoMemento(username, password);
}
public void restoreUserIndoMemento(UserInfoMemento userInfoMemento) {
this.username = userInfoMemento.getUsername();
this.password = userInfoMemento.getPassword();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void show() {
System.out.println("username:" + username);
System.out.println("password:" + password);
}
}
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
看管者类:
public class UserInfoCaretaker {
private UserInfoMemento userInfoMemento;
public UserInfoMemento getUserInfoMemento() {
return userInfoMemento;
}
public void setUserInfoMemento(UserInfoMemento userInfoMemento) {
this.userInfoMemento = userInfoMemento;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
测试类/客户端类:
public class MementoTest {
public static void main(String[] args) {
UserInfoOriginator userInfoOriginator = new UserInfoOriginator("张三", "123456");
UserInfoCaretaker userInfoCaretaker = new UserInfoCaretaker();
System.out.println("初始状态:");
userInfoOriginator.show();
userInfoCaretaker.setUserInfoMemento(userInfoOriginator.getUserInfoMemento());
userInfoOriginator.setUsername("张四");
userInfoOriginator.setPassword("888888");
System.out.println("\n修改状态:");
userInfoOriginator.show();
System.out.println("\n回复到初始状态:");
userInfoOriginator.restoreUserIndoMemento(userInfoCaretaker.getUserInfoMemento());
userInfoOriginator.show();
}
}
---------------------
转载,仅作分享,侵删
作者:EagleLi1
原文:https://blog.csdn.net/qq_21687635/article/details/85223530
|
|