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 定義於具體狀態類別中:狀態自我決定何時切換UserId):admin → SQL,其他 → 維持 XML此設計讓狀態轉換邏輯分散在各具體狀態類別中,符合單一職責原則,易於擴展新狀態 (如新增 OracleMessage 只需實作抽象類別並修改相關切換條件)。