01备忘录本质
备份原有对象,能够返回备忘点
02 场景
- 软件的返回上一步,下一步
- 数据库的事务回滚
03 代码实现
备忘录对象用于记录对象的全部信息,通过负责人类来恢复和存储备份点。
/**
* 原有对象
*/
@Data
@AllArgsConstructor
class Obj {
private int age;
private String name;
private String address;
//备忘操作
public ObjMemo memo() {
return new ObjMemo(this);
}
//恢复
public void recover(ObjMemo memo) {
this.age = memo.getAge();
this.name = memo.getName();
this.address = memo.getAddress();
}
}
/**
* 备忘录对象
*/
@Data
class ObjMemo {
private int age;
private String name;
private String address;
public ObjMemo(Obj obj) {
this.age = obj.getAge();
this.name = obj.getName();
this.address = obj.getAddress();
}
}
/**
* 负责人类
*
* @author Harvey
* @create 2018-04-07 上午12:30
**/
public class MemoCareTaker {
//用于存储备份点
private Stack<ObjMemo> stack = new Stack<>();
public ObjMemo getMemo() {
return stack.pop();
}
public void setMemo(ObjMemo memo) {
stack.add(memo);
}
}
调用:
MemoCareTaker taker = new MemoCareTaker();
Obj obj = new Obj(12,"harvey","beijing");
System.out.println(obj);
taker.setMemo(obj.memo());
obj.setAge(30);
System.out.println("change===>" + obj);
obj.recover(taker.getMemo());
System.out.println("recover====>" + obj);
结果:
Obj(age=12, name=harvey, address=beijing)
change===>Obj(age=30, name=harvey, address=beijing)
recover====>Obj(age=12, name=harvey, address=beijing)