程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 《模式——工程化實現及擴展》備忘錄模式 Memento—“自我檢驗 參考答案

《模式——工程化實現及擴展》備忘錄模式 Memento—“自我檢驗 參考答案

編輯:C#入門知識

1、

interface IOriginator<T>
    where T : IState
{
    /// <summary>
    /// 保存一個備忘
    /// </summary>
    /// <remarks>
    ///     默認方式——當前所有數據的全備忘
    /// </remarks>
    void SaveCheckPoint();

    /// <summary>
    /// 恢復一個備忘
    /// </summary>
    /// <remarks>
    ///     默認方式——恢復最近一次全備忘
    /// </remarks>
    void Undo();

    /// <summary>
    /// 保存一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    void SaveCheckPoint(string name);

    /// <summary>
    /// 恢復一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    void Undo(string name);

    /// <summary>
    /// 保存一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    void SaveCheckPoint(string name, string version);

    /// <summary>
    /// 恢復一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    void Undo(string name, string version);

    /// <summary>
    /// 保存一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    /// <param name="subjectName">業務主題名稱</param>
    void SaveCheckPoint(string name, string version, string subjectName);

    /// <summary>
    /// 恢復一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    /// <param name="subjectName">業務主題名稱</param>
    void Undo(string name, string version, string subjectName);

    /// <summary>
    /// 保存一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    /// <param name="subjectName">業務主題名稱</param>
    /// <param name="start">時間區間起點</param>
    /// <param name="end">時間區間終點</param>
    void SaveCheckPoint(string name, string version, string subjectName, DateTime start, DateTime end);

    /// <summary>
    /// 恢復一個備忘
    /// </summary>
    /// <param name="name">備忘的名稱</param>
    /// <param name="version">備忘的版本</param>
    /// <param name="subjectName">業務主題名稱</param>
    /// <param name="start">時間區間起點</param>
    /// <param name="end">時間區間終點</param>
    void Undo(string name, string version, string subjectName, DateTime start, DateTime end);
}
 

 

2、集成Memento和CoR

 

示例說明:

1) 為了簡化示例,用string替換IState 接口


2)CoR沒有采用鏈表方式,而是通過LINQ方式實現

3) CoR中的每個Handler設計為具有閉合操作的接口(壓縮、簽名、加密等,在恢復的時候還需要進行對應的反向處理)


4)在SaveCheckPoint()和Undo()的過程中分別調用CoR的正向處理和反向處理

 

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MarvellousWorks.PracticalPattern.Memento.Tests.Exercise
{
    [TestClass]
    public class MementoCoRFixture
    {
        /// <summary>
        /// 為了簡化沒有定義原發器接口,直接定義了原發器類型
        /// </summary>
        class Originator
        {
            public string State { get; set; }

            Memento m;

            public HandlerCoRBuilder<string> HandlerCoRBuilder { get; set; }

            /// <summary>
            /// 把備忘錄定義為原發器的內部類型
            /// </summary>
            /// <typeparam name="T"></typeparam>
            class Memento
            {
                public string State { get; set; }
            }

            /// <summary>
            /// 把狀態保存到備忘錄
            /// </summary>
            public virtual void SaveCheckpoint()
            {
                Trace.WriteLine(" Originator.void SaveCheckpoint() -----------------");
                m = new Memento()
                        {
                            State = ProcessState(HandlerCoRBuilder.BuildUpProcessCoR(), this.State)
                        };
            }
            /// <summary>
            /// 從備忘錄恢復之前的狀態
            /// </summary>
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved