设计模式学习笔记十九:备忘录模式

设计模式学习笔记十九:备忘录模式

介绍

备忘录(MEMENTO)模式属于对象行为型模式。主要用来对象状态的备份,可以理解为对象快照副本。当需要的时候可以从副本中回滚。

优点

  • 回滚具备了数据恢复能力

缺点

  • 需要占用额外的内存空间
  • 对象复杂备份耗时多

使用场景

需要存储状态的场景,比较数据快照。

UML结构图:

Memento

代码实现

1.定义原发器,就是创建备忘录的那个对象,一般也是要进行备忘的对象。提供创建备忘录和回复备忘录的调用入口。即Originator:

public class Originator {
    private String action;

    public Originator() {
        this.action = action;
    }
    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
        System.out.println(this.action);
    }

    public Memento createMemento(String action) {
        Memento memento = new Memento();
        memento.setAction(action);
        return memento;
    }

    public void setMemento(Memento memento) {
        this.action = memento.getAction();
        System.out.println("执行回滚......");
    }
}

2.备忘录存储对象,可以是其他介质。即Memento:

public class Memento {
    String action;

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }
}

3.备忘录管理者,一个POJO对象,即Caretaker

public class Caretaker {
    private final Memento memento;
    public Caretaker(Memento memento) {
        this.memento = memento;
    }

    public Memento getMemento() {
        return memento;
    }
}

5.测试调用,TestDrive

public class Run {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setAction("执行操作:向前一步走");
        System.out.println("当前状态:" + originator.getAction());

        Memento memento = originator.createMemento(originator.getAction());

        Caretaker caretaker = new Caretaker(memento);

        originator.setAction("执行操作:向左一步走");
        originator.setMemento(caretaker.getMemento());
        System.out.println("当前操作状态:" + originator.getAction());
    }
}
posted @ 2015-09-02 13:05  土豆条  阅读(165)  评论(0编辑  收藏  举报