- 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
- 并不是在类A中增加一个A对象的实例a,而是将要备忘的具体属性单独抽出来,存放到一个新类B中
- A不需要包含备忘对象B,只需在A中增加一个新建备忘B对象和由备忘B对象恢复当前属性信息的方法
- 本例中最后sex未恢复是因为未将此属性加入到Memento类中,sex为不需要恢复的属性
- 代码:
public class Boy {
private String name;//get set
private String age;//get set
private String sex;//get set
public Memento createMemento(){
return new Memento(name,age);
}
public void backMemento(Memento memento){
this.name = memento.getMementoName();
this.age = memento.getMementoAge();
}
public void getBoyInfo(){
System.out.println("姓名:"+name+",年龄:"+age+",性别:"+sex);
}
}
//此处的memento存储本类中那些需要备忘的属性信息
public class Memento {
private String mementoName;//get set
private String mementoAge;//get set
public Memento(String mementoName,String mementoAge){
this.mementoName = mementoName;
this.mementoAge = mementoAge;
}
}
public class MementoManager {
private Memento memento;//get set
}
public class Client {
public static void main(String[] args){
Boy boy = new Boy();
MementoManager mementoManager = new MementoManager();
boy.setName("马面");
boy.setAge("20");
boy.setSex("男");
Memento boyBack = boy.createMemento();
mementoManager.setMemento(boyBack);//设置备忘管理类中的备忘类实例
boy.getBoyInfo();//获取原始属性信息
boy.setName("牛头");
boy.setAge("25");
boy.setSex("女");
boy.getBoyInfo();//获取修改后的属性信息
boy.backMemento(mementoManager.getMemento());
boy.getBoyInfo();//获取恢复后的属性信息
}
}