备忘录模式
【摘要】
定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
优点:1.可以使用能够比较方便地回到某个历史的状态
2.实现了信息的封装,使得用户不需要关心状态的保存细节
缺点:1.消...
定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
优点:1.可以使用能够比较方便地回到某个历史的状态
2.实现了信息的封装,使得用户不需要关心状态的保存细节
缺点:1.消耗资源
使用场景:ctrl+z键、浏览器回退。
原理:通过一个备忘录类专门存储对象状态(简单来说 就是把原来数据封装成一个实体类Memento 然后将这个实体类放在另一实体Caretaker中 当需要时 在把原来的实体取出重新使用)
类图:
Originator是发起人,事件内部的处理
Caretaker是管理者,用于set以前的数据 就是把原来的Memento数据放入保存
Memento是备忘录,记录数据的BO
代码模板
Memento
-
public class Memento {
-
-
private String state;
-
-
public Memento(String state) {
-
this.state = state;
-
}
-
-
public String getState() {
-
return state;
-
}
-
-
}
Originator
-
public class Originator {
-
-
private String state;
-
-
public String getState() {
-
return state;
-
}
-
-
public void setState(String state) {
-
this.state = state;
-
}
-
-
public Memento createMento() {
-
return (new Memento(state));
-
}
-
-
public void setMemento(Memento memento) {
-
state = memento.getState();
-
}
-
-
public void show() {
-
System.out.println("state = " + state);
-
}
-
-
}
Caretaker
-
public class Caretaker {
-
-
private Memento memento;
-
-
public Memento getMemento() {
-
return memento;
-
}
-
-
public void setMemento(Memento memento) {
-
this.memento = memento;
-
}
-
-
}
栗子
Memento 需要保存的数据BO
-
public class PersonState{
-
-
private String arms; //武器
-
private String clothes; //衣服
-
-
public PersonState(String arms,String clothes) {
-
this.arms = arms;
-
this.clothes = clothes;
-
}
-
-
//get set 方法
-
-
-
}
Originator发起人 具体处理也业务的类
-
public class Originator{
-
-
private String arms; //武器
-
private String clothes; //衣服
-
-
//get set 方法
-
-
//新建状态
-
public PersonState createPersonState() {
-
return (new PersonState(arms,clothes));
-
}
-
-
public void setPersonState(PersonState personState) {
-
arms= personState.getArms();
-
clothes = personState.getClothes();
-
-
}
-
-
public void show() {
-
System.out.println("武器 = " + arms,"衣服=" + clothes);
-
}
-
-
}
Caretaker
-
public class Caretaker {
-
-
private PersonState personState;
-
-
public PersonState getPersonState() {
-
return personState;
-
}
-
-
public void setPersonState(PersonState personState) {
-
this.personState = personState;
-
}
-
-
}
调用
-
public class Client {
-
-
public static void main(String[] args) {
-
//初始状态
-
Originator originator = new Originator();
-
originator.setArms("木剑"); //武器
-
originator.setClothes("布甲"); //衣服
-
originator.show();
-
-
//保存上一个状态
-
Caretaker caretaker = new Caretaker();
-
caretaker.setPersonState(originator.createPersonState());
-
-
//充钱了
-
originator.setArms("屠龙刀"); //武器
-
originator.setClothes("大金链子大金表"); //衣服
-
originator.show();
-
-
//被人爆了
-
originator.setPersonState(caretaker.getMemento());
-
originator.show();
-
}
-
-
}
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/102671894
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)