备忘录模式,用于存储当前状态、备份以及恢复,从数据结构上讲,需要恢复,就需要使用到栈的数据结构。
例子
class SudoBrowser {
private String state;
public void setState(String state) {
this.state = state;
}
public String getStete() {
return state;
}
public void restore(Snapshot s) {
this.setState(s.getState());
}
public Snapshot createSnapshot() {
return new SnapShot(state);
}
}
class SnapShot {
private String state;
public getState() {
return state;
}
public setState(String s) {
this.state = s;
}
}
class StateHolder {
private Stack snapshots = new Stack<>();
public Snapshot popSnapshot() {
return snapshots.pop();
}
public void pushSnapshot(Snapshot snapshot) {
snapshots.push(snapshot);
}
}
public class Application {
public static void main(string[] argc) {
StateHolder hodler = new StateHolder();
SudoBrowser browser = new SudoBrowser();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String input = scanner.next();
if (input.equals("get")) {
System.out.println(browser.toString());
} else if (input.equals("undo")) {
Snapshot snapshot = hodler .popSnapshot();
browser .restoreSnapshot(snapshot);
} else {
hodler .pushSnapshot(browser.createSnapshot());
browser.setState(input); }
}
}
}
上面模拟了一个简单的浏览器,使用StateHolder使用堆栈的数据结构保存历史以及回退,抽象了SnapShot用以保存当前状态。
小结
备忘录模式是现实使用比较常用的一种设计模式,我们可以与各种组件级别的snapshot对比一下,看看有没有这种朴素的模式的影子在里面。
网友评论