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

bar*_*ara 6 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();
    }    
}
Run Code Online (Sandbox Code Playgroud)

这是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
}
Run Code Online (Sandbox Code Playgroud)

这段代码很好,Memento的工作完美无缺.

jal*_*nn2 4

Caretaker 是调用save()restore()方法的类Originator。它保存(照顾)类的集合Memento并决定何时检查点或回滚数据。