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

設計模式 (C#) 實戰:狀態模式 — XMLMessage 具體狀態與狀態切換邏輯 (中上)

     編輯:關於C語言

XMLMessage — 具體狀態類別


public class XMLMessage : AbstractMessageState
{
    public XMLMessage(Message message) { _message = message; }

    public override void StateChangeCheck()
    {
        // UserId 為 admin 時切換至 SqlMessage
        if (_message.UserId == "admin")
        {
            _message.AbstractMessageState = new SqlMessage(_message);
        }
    }

    public override List Get()
    {
        return new List { new MessageModel("XML方式獲取Message", DateTime.Now) };
    }

    public override bool Insert(MessageModel mm) => true; // 略
}

關鍵設計點

  • StateChangeCheck 定義於具體狀態類別中:狀態自我決定何時切換
  • 切換條件基於 Context 狀態 (UserId):admin → SQL,其他 → 維持 XML
  • 新狀態實例化時傳入同一 Context 參考,保持上下文連續性

此設計讓狀態轉換邏輯分散在各具體狀態類別中,符合單一職責原則,易於擴展新狀態 (如新增 OracleMessage 只需實作抽象類別並修改相關切換條件)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved