我目前正试图弄清楚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的工作非常完美。
答案 0 :(得分:2)
看守人是在save()
上调用restore()
和Originator
方法的班级。它保留(Takes of)Memento
类的集合,并决定何时检查点或回滚数据。