设计模式读书笔记-备忘录模式

2016-08-21
读书笔记
  • 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
  • 并不是在类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();//获取恢复后的属性信息
    }

}

Kommentare: