有部番叫做《从零开始的异世界生活》,男主菜月昴穿越到了一个带有魔幻色彩异世界,不过因为不熟悉他也总是死亡。不过仿佛存档了一样,在他死亡后却可以回退到之前,再重新开始。这跟我们设计模式中的备忘录模式很像,可以记录从前的状态。
备忘录模式是怎么实现的呢?
首先我们要有一个Originator类,即状态的发起人
public class Cai {
private int day = 1;
public void OneDayAfter() { this.day += 1; }
public void setDay(int day) { this.day = day; }
public Memento createMemento(){
return new Memento(this.day);
}
public void restoreMemento(Memento memento){
setDay(memento.getDay());
}
public String toString() {
return "今天是第"+day+"天";
}
}
有个存放状态的类
public class Memento {
private int day;
public Memento(int day){ this.day = day; }
public int getDay() { return day; }
}
有一个管理状态的类使状态与Client隔离
public class Caretaker {
private Memento memento;
public void setMemento(Memento memento) { this.memento = memento; }
public Memento getMemento() { return memento; }
}
最后是场景类
public class Client {
public static void main(String[] args) {
Cai cai = new Cai();
System.out.println(cai);
Caretaker ct = new Caretaker();
ct.setMemento(cai.createMemento());
cai.OneDayAfter();
System.out.println(cai);
System.out.println("...发生了一些事菜月昴死了,时间重置...");
cai.restoreMemento(ct.getMemento());
System.out.println(cai);
}
}
运行结果:
今天是第1天
今天是第2天
…发生了一些事菜月昴死了,时间重置…
今天是第1天