首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:命令模式完整測試與撤銷重做驗證 (5/5)

     編輯:關於C語言

客戶端測試程式碼

展示命令模式支援的操作執行、撤銷與重做功能:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Pattern.Command;

public partial class Command : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Message m = new Message();

        Response.Write("操作");
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第1條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第2條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第3條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第4條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Delete, new MessageModel("第2條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第5條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Delete, new MessageModel("第3條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第6條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Do(Action.Insert, new MessageModel("第7條", DateTime.Now)));
        Response.Write("<br />");
        Response.Write("<br />");

        Response.Write("撤銷4次操作");
        Response.Write("<br />");
        Response.Write(m.Undo(4));
        Response.Write("<br />");
        Response.Write("<br />");

        Response.Write("重復2次操作");
        Response.Write("<br />");
        Response.Write(m.Redo(2));
        Response.Write("<br />");
        Response.Write("<br />");

        Response.Write("撤銷3次操作");
        Response.Write("<br />");
        Response.Write(m.Undo(3));
    }
}

執行結果

操作
Insert:第1條
Insert:第2條
Insert:第3條
Insert:第4條
Delete:第2條
Insert:第5條
Delete:第3條
Insert:第6條
Insert:第7條

撤銷4次操作
Delete:第7條 Delete:第6條 Insert:第3條 Delete:第5條

重復2次操作
Insert:第5條 Delete:第3條

撤銷3次操作
Insert:第3條 Delete:第5條 Insert:第2條

結果分析

  • 命令歷史記錄:Message (Invoker) 維護命令清單 _listCommand 與當前指標 current。
  • 撤銷機制:Undo(4) 向後移動指標 4 步,執行各命令的 UnExecute()(反向操作:Insert↔Delete)。
  • 重做機制:Redo(2) 向前移動指標 2 步,再次執行 UnExecute()(此處邏輯為重做反向操作)。
  • 狀態恢復:最終 Undo(3) 繼續向後撤銷,展示命令歷史的雙向導航能力。

命令模式核心價值

優勢說明
請求物件化將操作封裝為命令物件,可傳遞、儲存、佇列、日誌記錄。
撤銷/重做透過命令歷史與反向操作實現,支援多級撤銷重做。
解耦合請求者與接收者分離,Invoker 不知 Receiver 具體類別。
可擴展性新增命令類型只需新增 ConcreteCommand,不修改 Invoker/Receiver。
巨集命令可組合多個命令為巨集命令(Composite Command)。
命令模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved