备忘录模式
【摘要】
定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
优点: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)