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

C# 設計模式無廢話系列十八:命令模式(三)—— 適用場景與實現精要

     編輯:關於C語言

代碼執行結果

代碼結構說明

  • 範例僅示範防止請求過頻的控制,未處理客戶端與服務端通訊細節,實際專案中需完善。
  • Man 類別(接收者):負責具體執行請求。
  • GameCommand 抽象類別(抽象命令):定義統一的命令執行介面。
  • MoveXXX 類別(具體命令):封裝接收者的具體方法,使發送者無需知曉接收者介面。
  • Server 類別(調用者):命令的管理者,在適當時機觸發命令執行。

何時採用命令模式

以下需求可考慮命令模式:

  • 發起者與接收者生命週期不同:如立遺囑,執行時發起者已不在,靠律師(調用者)執行。
  • 命令需具備物件特性:需儲存命令以實現撤銷(GUI 常見)或佇列化操作(網路操作常見)。
  • 將命令提升為類別層次:便於結合建立型、結構型模式,擴充行為更靈活。

實現要點

  • 活動序列:客戶端指定接收者 → 建立具體命令並指定接收者 → 透過調用者執行 → 調用者在適當時機發出指令 → 具體命令呼叫接收者方法落實執行。
  • 核心結構:抽象命令介面雙重含義——將方法提升為類別、統一執行介面。
  • 調用者擴充功能:延遲執行、記錄日誌、撤銷命令等。
  • 角色可精簡:單一執行者或邏輯簡單時可合併邏輯至具體命令;無額外調用需求可省略調用者。
  • 巨集命令:可用組合模式封裝多個具體命令。
  • Undo 實作:接收者通常需公開 Undo 介面,但實際應用中環境狀態複雜,Undo 非單純呼叫方法即可。

注意事項

  • 勿被複雜結構迷惑,核心在於「將方法提升至類別層次的好處即命令模式的好處」。
  • 與狀態模式、策略模式相比,命令模式可能產生更多類別或物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved