美文网首页
设计模式-备忘录

设计模式-备忘录

作者: Wu杰语 | 来源:发表于2020-12-26 12:14 被阅读0次

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

    例子

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

    相关文章

      网友评论

          本文标题:设计模式-备忘录

          本文链接:https://www.haomeiwen.com/subject/fbtgnktx.html