黑马程序员技术交流社区
标题:
【上海校区】【设计模式】备忘录模式
[打印本页]
作者:
不二晨
时间:
2018-12-31 10:03
标题:
【上海校区】【设计模式】备忘录模式
模式定义
备忘录模式在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
下图是该模式的类图:
一个生动的例子
备忘录类:
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
作者:
不二晨
时间:
2019-1-3 10:08
奈斯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2