设计模式十————备忘录模式

备忘录模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象。这样以后就可以将该对象恢复到原先保存的状态。
初步理解:因为要保存状态,因此要有一个Memento类来存储对象的内部状态。因为有很多状态要保存,因此需要一个CareTaker类来管理这些Memento。Originator是要保存状态的对象。
code…


Originator类:

public class Originator {
    private String state;

    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public Memento createState()
    {
        return new Memento(this.state);
    }
    public void restoreState(Memento memento)
    {
        this.state=memento.getState();
    }
    public void show()
    {
        System.out.println("当前状态:"+this.state);
    }
}

当这个类需要保存它的状态时,就调用它的createState方法。就会生成一个Memento对象,将这个对象传递给careTaker,将其添加到careTaker的集合当中。
Memento类:

public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }
    public String getState() {
        return state;
    }
}

careTaker类:

public class Caretaker {
    private ArrayList arrayList=new ArrayList<>();
    public void saveMemento(Memento memento)
    {
        arrayList.add(memento);//添加备忘录
    }
    public Memento getMemento(int index)
    {
        return arrayList.get(index);
    }
}

main方法:

public class Main {
    public static void main(String[] args) {
        Originator originator=new Originator();//要存储这个对象的状态
        Caretaker caretaker=new Caretaker();//管理备忘录的对象
        originator.setState("sleep");//设置对象的状态
        originator.show();//显示对象的当前状态
        caretaker.saveMemento(originator.createState());//对对象的当前状态进行备份
        originator.setState("fly");//设置新状态
        originator.show();
        caretaker.saveMemento(originator.createState());//继续备份
        originator.setState("run");
        originator.show();
        caretaker.saveMemento(originator.createState());
        originator.restoreState(caretaker.getMemento(1));//恢复到第二个状态
        originator.show();
    }
}

总结:备忘录就是对历史状态的备份,备份会有很多份,因此要有一个管理类负责管理这些备份。这个管理可以添加和删除备份。


上一篇
---The End---
下一篇

你可能感兴趣的:(设计模式)