管理同事註冊與訊息路由分發:
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;
}
}
}
}
Dictionary<string, AbstractMessage> 以 UserId 為鍵管理同事。Register() 同時設定同事的 AbstractMessageMediator 回參考。Send() 根據目標 UserId 查找同事並呼叫其 Insert()。
Client (發送者 SqlMessage)
│
▼
Mediator (MessageMediator.Send)
│
├─ 查找 _dictionary[to] → 目標同事 (XMLMessage)
│
▼
目標同事.Insert(from, mm) → 執行具體邏輯 → 返回結果
│
▼
Client 接收結果