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

設計模式 (C#) 實戰:狀態模式 — SqlMessage 與 Context (Message) 實作詳解 (中下)

     編輯:關於C語言

SqlMessage — 具體狀態類別


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

    public override void StateChangeCheck() { /* SQL 狀態無需切換 */ }

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

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

Message — Context 角色

持有抽象狀態引用,委派操作給當前狀態,並在操作前檢查狀態切換:


public class Message
{
    private AbstractMessageState _abstractMessageState;
    public AbstractMessageState AbstractMessageState
    {
        get => _abstractMessageState;
        set => _abstractMessageState = value;
    }

    private string _userId;
    public string UserId { get => _userId; set => _userId = value; }

    public Message(string userId)
    {
        _userId = userId;
        _abstractMessageState = new XMLMessage(this); // 預設狀態
    }

    public List Get()
    {
        _abstractMessageState.StateChangeCheck(); // 檢查是否需切換
        return _abstractMessageState.Get();
    }

    public bool Insert(MessageModel mm)
    {
        _abstractMessageState.StateChangeCheck();
        return _abstractMessageState.Insert(mm);
    }
}

Context 不知具體狀態細節,僅透過抽象介面互動 — 核心解耦點。

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