设计模式-备忘录

2020-12-26  本文已影响0人  Wu杰语

备忘录模式,用于存储当前状态、备份以及恢复,从数据结构上讲,需要恢复,就需要使用到栈的数据结构。

例子

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对比一下,看看有没有这种朴素的模式的影子在里面。

上一篇下一篇

猜你喜欢

热点阅读