为什么我们需要Memento Pattern中的Caretaker课程?它真的如此重要吗?

时间:2014-08-14 17:48:56

标签: java design-patterns memento

我目前正试图弄清楚Memento Pattern的工作原理。我坚持使用Caretaker课程?拥有它真的很重要吗?我的意思是我可以在没有这门课的情况下使用纪念品。请参阅下面的代码。

public class Originator {
    private String state;
    private Integer code;
    private Map<String, String> parameters;

    // Getters, setters and toString were omitted

    public Memento save() {
        return new Memento(this);
    }

    public void restore(Memento memento) {
        this.state = memento.getState();
        this.code = memento.getCode();
        this.parameters = memento.getParameters();
    }    
}

这是Memento的实施。

public class Memento {
    private String state;
    private Integer code;
    private Map<String, String> parameters;

    public Memento(Originator originator) {
        Cloner cloner = new Cloner();
        this.state = cloner.deepClone(originator.getState());
        this.code = cloner.deepClone(originator.getCode());
        this.parameters = cloner.deepClone(originator.getParameters());
    }

    // Getters and setters were omitted
}

此代码工作正常,Memento的工作非常完美。

1 个答案:

答案 0 :(得分:2)

看守人是在save()上调用restore()Originator方法的班级。它保留(Takes of)Memento类的集合,并决定何时检查点或回滚数据。