• C#设计模式——备忘录模式(Memento Pattern)


    一、概述

    在软件开发中,有时需要保存一个对象的状态,以便于允许用户取消相关操作或者从以往的状态中恢复过来。比如一个文档版本管理系统,可以根据需要将指定文档恢复到之前保存过的任意一个状态。这时就可以通过备忘录模式来实现。

    二、备忘录模式

    备忘录模式可以在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。其结构图如下:

    Memento用于保存Originator对象的内部状态。

    Originator创建Memento,并根据需要决定需要在Memento中保存那些状态,同时还能从Memento中恢复内部状态。

    Caretaker负责保存Memento对象,但不对Memento对象进行任何操作。

    三、示例

    我们我们就以文档版本管理系统为例来介绍备忘录模式。

    首先定义Originator,在这里就是文档本身。

     1     public class Document
     2     {
     3         public string Content { get; set; }
     4 
     5         public DocumentVersion CreateMemento()
     6         {
     7             return new DocumentVersion( Content);
     8         }
     9 
    10         public void SetMemento(DocumentVersion documentVersion)
    11         {
    12             Content = documentVersion.Content;
    13         }
    14     }

    接着定义Memento。

    1     public class DocumentVersion
    2     {
    3         public string Content { get; set; }
    4 
    5         public DocumentVersion(string content)
    6         {
    7             Content = content;
    8         }
    9     }

    最后定义Caretaker,通过一个Dictionary容器保存Memento。

     1     public class Caretaker
     2     {
     3         private Dictionary<int, DocumentVersion> _mementoList = new Dictionary<int, DocumentVersion>();
     4 
     5         public DocumentVersion GetDocumentVersion(int versionID)
     6         {
     7             return _mementoList[versionID];
     8         }
     9 
    10         public void AddDocumentVersion(DocumentVersion documentVersion)
    11         {
    12             int maxVersionID = _mementoList.Keys.Count == 0 ? 0: _mementoList.Keys.Max();
    13             _mementoList.Add(maxVersionID + 1, documentVersion);
    14         }
    15     }
  • 相关阅读:
    JavaScript专题——专题三 JavaScript 面向对象
    写在2012结尾,2013的开始
    jQuery层次选择器
    jQuery内容过滤选择器
    使用Storm实现实时大数据分析
    jQuery表单选择器
    JavaScript专题——专题四 JavaScript DOM
    精通CSS+DIV网页样式与布局——CSS文字效果
    JavaScript专题——专题二 JavaScript语法
    牛腩JavaScript
  • 原文地址:https://www.cnblogs.com/saville/p/3087657.html
Copyright © 2020-2023  润新知