什么叫备忘录模式:
备忘录模式允许我们保存一个时间点上的数据,在出现误操作或者系统出错,我们可以恢复我们保存的那个点上的数据。
开发中常见的场景:
1.事务操作
2.redis的持久化
备忘录模式例子:
这里,我们实现的是注册学生信息,当然是我们先定义一个学生类
package com.javademo.pattern.memento;
public class Student {
private String name ;
private int age ;
/**
* 数据保存,备忘
* @return
*/
public StudentMemento memento(){
StudentMemento sm = new StudentMemento();
sm.setName(this.name);
sm.setAge(this.age);
return sm ;
}
/**
* 数据恢复
* @param sm 备忘的消息实体,属性基本和student一致,便于拷贝
*/
public void recovery(StudentMemento sm){
this.name = sm.getName();
this.age = sm.getAge();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
System.out.println("name = " + name + " age = " + age);
return super.toString();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
再来实现我们的备忘实体类
/**
* 备忘录实体类
* @author liuxg
* @date 2016年5月28日 下午7:19:56
*/
public class StudentMemento {
private String name ;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
备忘录,需要是一个上下文类用来保存备忘实体类
/**
* 保存备忘实体类
* @author liuxg
* @date 2016年5月28日 下午7:21:25
*/
public class Takecare {
private StudentMemento studentMemento ; //可以是多个切片时间的备忘实体,用list容器
public StudentMemento getStudentMemento() {
return studentMemento;
}
public void setStudentMemento(StudentMemento studentMemento) {
this.studentMemento = studentMemento;
}
}
客户端进行测试
public class Client {
public static void main(String[] args) {
Takecare takecare = new Takecare();
Student student = new Student("liuxg", 20);
takecare.setStudentMemento(student.memento());//进行备忘
student.setAge(23); //操作
student.recovery(takecare.getStudentMemento()); //进行恢复
student.toString();
}
}