zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    7-20 (样卷)统计单词的个数 (40 分)
    7-21 删除字符 (30 分)
    7-19 计算有n个字符串中最长的字符串长度 (40 分)
    7-16 列表数字元素加权和(1) (40 分)
    7-17 列表元素个数的加权和(1) (40 分)
    7-15 求出歌手的得分 (40 分)
    7-10 jmu-python-异常-学生成绩处理基本版 (15 分)
    7-11 jmu-python-分段函数&数学函数 (15 分)
    7-12 产生每位数字相同的n位数 (30 分)
    7-9 jmu-python-异常-学生成绩处理专业版 (25 分)
  • 原文地址:https://www.cnblogs.com/saville/p/3087657.html
Copyright © 2011-2022 走看看