备忘录模式(行为型)

 

设计模式的3个分类:创建型模式、结构型模式、行为型模式

备忘录模式定义:

备忘录模式是一种行为型设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。

 

备忘录模式图示:

 

 

代码实现:

/**
 * 原始类
 */
public class Originator {

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    //保存状态到备忘录对象
    public Memento saveStateMemento() {
        return new Memento(state);
    }

    //通过备忘录对象,恢复状态
    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

/**
 * 备忘录类
 */
class Memento {

    private String state;

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

    public String getState() {
        return state;
    }
}

/**
 * 守护者类,负责保存多个"备忘录对象"
 */
public class CareTaker {

    //在List集合中会有很多的备忘录对象
    private List<Memento> mementoList = new ArrayList<>();

    public void add(Memento memento) {
        mementoList.add(memento);
    }

    //获取到第index个Originator的备忘录对象
    public Memento get(int index) {
        return mementoList.get(index);
    }
}

/**
 * 测试
 */
public class MementoPatternDemo {

    public static void main(String[] args) {


        Originator originator = new Originator();
        CareTaker careTaker = new CareTaker();

        originator.setState("State 1 ... ");//此状态没有被保存,因此也不能被恢复
        originator.setState("State 2 ... ");
        careTaker.add(originator.saveStateMemento());

        originator.setState("State 3 ...");
        careTaker.add(originator.saveStateMemento());

        originator.setState("State 4 ...");
        careTaker.add(originator.saveStateMemento());

        System.out.println("当前的状态是: " + originator.getState());


        originator.getStateFromMemento(careTaker.get(0));
        System.out.println("恢复到保存到第1个状态:" + originator.getState());

        originator.getStateFromMemento(careTaker.get(1));
        System.out.println("恢复到保存到第2个状态:" + originator.getState());

        originator.getStateFromMemento(careTaker.get(2));
        System.out.println("恢复到保存到第3个状态:" + originator.getState());

    }
}

//输出
当前的状态是: State 4 ...
恢复到保存到第1个状态:State 2 ... 
恢复到保存到第2个状态:State 3 ...
恢复到保存到第3个状态:State 4 ...

  

参考:

https://www.tutorialspoint.com/design_pattern/memento_pattern.htm

 

posted @ 2021-01-11 14:57  黑冰台  阅读(92)  评论(0)    收藏  举报