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

C# 設計模式實戰:State 狀態模式完整解析(二)

     編輯:關於C語言

程式碼執行結果

狀態模式執行結果

代碼角色說明

  • User:Context(環境),定義 Client 關心方法 BuyBook,持有狀態實例
  • UserLevel:State(抽象狀態),定義狀態相關行為介面,持有 Context 參考用於狀態轉換
  • NormalUser / SilverUser / GoldUser / DiamondUser:ConcreteState(具體狀態)

狀態轉換機制亮點

  • 轉換邏輯封裝在各具體狀態內(StateCheck)
  • 有序轉換:Normal → Silver → Gold → Diamond,僅前後狀態產生依賴
  • 新增狀態(如 Platinum)只需修改 Gold 的 StateCheck,符合開閉原則
  • 可引入 Template Method:抽象狀態定義 ExecuteAction 呼叫行為 + 轉換檢查

採用時機

  • 代碼層面:類別有多種狀態,內部用條件判斷狀態實現不同行為
  • 應用層面:物件有多種狀態,欲將狀態轉換與行為交給具體狀態類別處理

實現要點

  • Context 持有 State 實例
  • State 持有 Context 實例(用於修改 Context 狀態)
  • 狀態間依賴可透過外部配置(轉換規則表)消除

State vs Strategy 核心差異

維度StateStrategy
行為決定方式條件決定(內部狀態)Client 選擇(外部決定)
狀態/策略轉換自動遷移至適當狀態隨時可替換
誰發起變更State 內部Client
典型場景訂單狀態、遊戲角色狀態、工作流排序演算法、壓縮策略、付款方式

注意事項

  • 狀態物件過多 → 考慮 Flyweight:狀態實作為無狀態享元,額外狀態由 Context 管理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved