黑马程序员技术交流社区

标题: 【上海校区】【设计模式】备忘录模式 [打印本页]

作者: 不二晨    时间: 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