您的位置:首页 > 编程语言 > Java开发

java设计模式-备忘录模式

2016-05-28 19:23 603 查看
什么叫备忘录模式:

备忘录模式允许我们保存一个时间点上的数据,在出现误操作或者系统出错,我们可以恢复我们保存的那个点上的数据。

开发中常见的场景:

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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息