备忘录模式

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。优点:1.可以使用能够比较方便地回到某个历史的状态 2.实现了信息的封装,使得用户不需要关心状态的保存细节缺点:1.消耗资源


定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

优点:1.可以使用能够比较方便地回到某个历史的状态

          2.实现了信息的封装,使得用户不需要关心状态的保存细节

缺点:1.消耗资源

使用场景:ctrl+z键、浏览器回退。

原理:通过一个备忘录类专门存储对象状态(简单来说 就是把原来数据封装成一个实体类Memento 然后将这个实体类放在另一实体Caretaker中 当需要时 在把原来的实体取出重新使用)

类图:

image.png

Originator是发起人,事件内部的处理

Caretaker是管理者,用于set以前的数据 就是把原来的Memento数据放入保存

Memento是备忘录,记录数据的BO

代码模板

Memento

1. public class Memento {
2. 
3. private String state;
4. 
5. public Memento(String state) {
6. this.state = state;
7.     }
8. 
9. public String getState() {
10. return state;
11.     }
12. 
13. }

Originator

1. public class Originator {
2. 
3. private String state;
4. 
5. public String getState() {
6. return state;
7.     }
8. 
9. public void setState(String state) {
10. this.state = state;
11.     }
12. 
13. public Memento createMento() {
14. return (new Memento(state));
15.     }
16. 
17. public void setMemento(Memento memento) {
18.         state = memento.getState();
19.     }
20. 
21. public void show() {
22. System.out.println("state = " + state);
23.     }
24. 
25. }

Caretaker

1. public class Caretaker {
2. 
3. private Memento memento;
4. 
5. public Memento getMemento() {
6. return memento;
7.     }
8. 
9. public void setMemento(Memento memento) {
10. this.memento = memento;
11.     }
12. 
13. }

栗子

Memento 需要保存的数据BO

1. public class PersonState{
2. 
3. private String arms;    //武器
4. private String clothes;    //衣服
5. 
6. public PersonState(String arms,String clothes) {
7. this.arms = arms;
8. this.clothes = clothes;
9.     }
10. 
11. //get set 方法
12. 
13. 
14. }

Originator发起人 具体处理也业务的类

1. public class Originator{
2. 
3. private String arms;    //武器
4. private String clothes;    //衣服
5. 
6. //get set 方法
7. 
8. //新建状态
9. public PersonState createPersonState() {
10. return (new PersonState(arms,clothes));
11.     }
12. 
13. public void setPersonState(PersonState personState) {
14.         arms= personState.getArms();
15.         clothes = personState.getClothes();
16. 
17.     }
18. 
19. public void show() {
20. System.out.println("武器 = " + arms,"衣服=" + clothes);
21.     }
22. 
23. }

Caretaker

1. public class Caretaker {
2. 
3. private PersonState personState;
4. 
5. public PersonState getPersonState() {
6. return personState;
7.     }
8. 
9. public void setPersonState(PersonState personState) {
10. this.personState = personState;
11.     }
12. 
13. }

调用

1. public class Client {
2. 
3. public static void main(String[] args) {
4. //初始状态
5. Originator originator = new Originator();       
6.         originator.setArms("木剑");    //武器
7.         originator.setClothes("布甲");    //衣服
8.         originator.show();
9. 
10. //保存上一个状态
11. Caretaker caretaker = new Caretaker();
12.         caretaker.setPersonState(originator.createPersonState());
13. 
14. //充钱了
15.         originator.setArms("屠龙刀");    //武器
16.         originator.setClothes("大金链子大金表");    //衣服
17.         originator.show();
18. 
19. //被人爆了
20.         originator.setPersonState(caretaker.getMemento());
21.         originator.show();
22.     }
23. 
24. }

 


相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
6月前
|
存储 设计模式 Java
|
6月前
|
设计模式 安全 C++
行为型 备忘录模式
行为型 备忘录模式
48 1
|
设计模式 存储 数据库
设计模式~备忘录模式(memento)-22
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。记录快照(瞬间状态)/存盘。 目录  (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: 代码
44 1
|
设计模式 存储 Java
Java设计模式-备忘录模式(Memento)
Java设计模式-备忘录模式(Memento)
|
设计模式
我学会了,备忘录模式
备忘录模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
146 0
我学会了,备忘录模式
|
设计模式
我学会了,状态模式
状态模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
116 0
我学会了,状态模式
|
存储 程序员 开发工具
状态模式与备忘录模式(2)
状态模式与备忘录模式(2)
146 0
状态模式与备忘录模式(2)
|
uml
状态模式与备忘录模式(1)
状态模式与备忘录模式(1)
102 0
状态模式与备忘录模式(1)
|
存储 Java Spring
状态模式与备忘录模式(3)
状态模式与备忘录模式(3)
142 0
状态模式与备忘录模式(3)
|
存储 设计模式 Java
浅谈JAVA设计模式之——备忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
182 0
浅谈JAVA设计模式之——备忘录模式(Memento)