
备忘录就是用来对一个对象进行备份,然后可以恢复回去。
备忘录设计模式:保存某个对象的内部状态的拷贝,以便恢复状态。
结构:发源器类Originator,备忘录类Memento,负责人CareTaker
代码演示备忘录:
1.数据源对象Emp
public class Emp {
private String ename;
private int age;
private double salary;
public EmpMemento memento(){
return new EmpMemento(this);
}
public void recovery(EmpMemento mmt){
this.ename=mmt.getEname();
this.age=mmt.getAge();
this.salary=mmt.getSalary();
}
public Emp(String ename, int age, double salary) {
this.ename = ename;
this.age = age;
this.salary = salary;
}
public Emp() {
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Emp{" +
"ename='" + ename + ''' +
", age=" + age +
", salary=" + salary +
'}';
}
}
2.备忘录对象EmpMemento
public class EmpMemento {
private String ename;
private int age;
private double salary;
public EmpMemento(Emp e){
this.ename=e.getEname();
this.age=e.getAge();
this.salary=e.getSalary();
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
3.负责人对象:
public class CareTaker {
private EmpMemento empMemento;
//private List list=new ArrayList<>();
public EmpMemento getEmpMemento() {
return empMemento;
}
public void setEmpMemento(EmpMemento empMemento) {
this.empMemento = empMemento;
}
}
4.测试:
public static void main(String[] args) {
CareTaker taker=new CareTaker();
Emp emp=new Emp("杨过",38,40000);
System.out.println("开始:"+emp);
//备忘一次
taker.setEmpMemento(emp.memento());
emp.setAge(40);
System.out.println("改变:"+emp);
//恢复
emp.recovery(taker.getEmpMemento());
System.out.println("恢复:"+emp);
}
结果:
开始:Emp{ename='杨过', age=38, salary=40000.0}
改变:Emp{ename='杨过', age=40, salary=40000.0}
恢复:Emp{ename='杨过', age=38, salary=40000.0}
应用场景:事务回滚等。