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

C# 設計模式:中介者模式具體中介者實作 (3/5)

     編輯:關於C語言

具體中介者:MessageMediator

管理同事註冊與訊息路由分發:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.Mediator
{
    /// 
    /// 中介者(ConcreteMediator)
    /// 
    public class MessageMediator : AbstractMessageMediator
    {
        private Dictionary<string, AbstractMessage> _dictionary = new Dictionary<string, AbstractMessage>();

        /// 
        /// 註冊一個操作 Message 的物件
        /// 
        /// AbstractMessage
        public override void Register(AbstractMessage abstractMessage)
        {
            if (!_dictionary.ContainsKey(abstractMessage.UserId))
            {
                _dictionary.Add(abstractMessage.UserId, abstractMessage);
            }

            abstractMessage.AbstractMessageMediator = this;
        }

        /// 
        /// 發送 Message
        /// 
        /// 來自 UserId
        /// 發送到 UserId
        /// Message 實體物件
        /// 處理結果
        public override string Send(string from, string to, MessageModel mm)
        {
            AbstractMessage abstractMessage = _dictionary[to];
            if (abstractMessage != null)
            {
                return abstractMessage.Insert(from, mm);
            }
            else
            {
                return null;
            }
        }
    }
}

ConcreteMediator 核心職責

  • 同事註冊表:Dictionary<string, AbstractMessage> 以 UserId 為鍵管理同事。
  • 雙向關聯建立:Register() 同時設定同事的 AbstractMessageMediator 回參考。
  • 路由分發:Send() 根據目標 UserId 查找同事並呼叫其 Insert()。
  • 解耦合中心:同事間零直接引用,所有通訊經由中介者協調。

中介者模式通訊流程圖解

Client (發送者 SqlMessage)
    │
    ▼
Mediator (MessageMediator.Send)
    │
    ├─ 查找 _dictionary[to] → 目標同事 (XMLMessage)
    │
    ▼
目標同事.Insert(from, mm) → 執行具體邏輯 → 返回結果
    │
    ▼
Client 接收結果

適用場景

  • 多個物件之間存在複雜的網狀引用關係。
  • 物件間通訊邏輯需集中管理(如聊天室、航管系統、GUI 對話框)。
  • 需動態增減通訊參與者。
  • 想復用同事類別但通訊邏輯不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved