设计模式-行为型-备忘录模式

  1. 1. 备忘录模式的原理与实现

1. 备忘录模式的原理与实现

  • snapshot模式
    • Memento Design Pattern
    • Captures and externalizes an object’s internal state so that it can be restored later, all without violating encapsulation
    • 在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象先前的状态。
      • 存储副本以便后期恢复
      • 在不违背封装原则的前提下,进行对象的备份和恢复
    public class InputText {
      private StringBuilder text = new StringBuilder();

      public String getText() {
        return text.toString();
      }

      public void append(String input) {
        text.append(input);
      }

      public Snapshot createSnapshot() {
        return new Snapshot(text.toString());
      }

      public void restoreSnapshot(Snapshot snapshot) {
        this.text.replace(0, this.text.length(), snapshot.getText());
      }
    }

    public class Snapshot {
      private String text;

      public Snapshot(String text) {
        this.text = text;
      }

      public String getText() {
        return this.text;
      }
    }

    public class SnapshotHolder {
      private Stack<Snapshot> snapshots = new Stack<>();

      public Snapshot popSnapshot() {
        return snapshots.pop();
      }

      public void pushSnapshot(Snapshot snapshot) {
        snapshots.push(snapshot);
      }
    }

    public class ApplicationMain {
      public static void main(String[] args) {
        InputText inputText = new InputText();
        SnapshotHolder snapshotsHolder = new SnapshotHolder();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
          String input = scanner.next();
          if (input.equals(":list")) {
            System.out.println(inputText.toString());
          } else if (input.equals(":undo")) {
            Snapshot snapshot = snapshotsHolder.popSnapshot();
            inputText.restoreSnapshot(snapshot);
          } else {
            snapshotsHolder.pushSnapshot(inputText.createSnapshot());
            inputText.append(input);
          }
        }
      }
    }

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:设计模式-行为型-备忘录模式

文章字数:271

本文作者:Leilei Chen

发布时间:2020-07-30, 12:06:40

最后更新:2020-07-30, 12:07:06

原始链接:https://www.llchen60.com/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A1%8C%E4%B8%BA%E5%9E%8B-%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏