C#でデザインパターン「Mediatorパターン」

C# コンピュータ
C#

オブジェクト同士で通信する場合、Mediatorというオブジェクトを介して通信を行うパターン。

/// <summary>
/// Mediatorパターンのサンプルコード
/// </summary>
class MyMediator
{
    Dictionary<string, MyColleague> _colleagues = [];
    public void AddCollegue(MyColleague obj)
    {
        _colleagues.Add(obj.Name, obj);
    }
    public void Send(string from, string to, string message)
    {
        if (_colleagues.ContainsKey(to))
        {
            _colleagues[to].Receive(from, message);
        }
    }
}
class MyColleague
{
    public string Name {get; set;}
    MyMediator _mediator;
    public MyColleague(string name, MyMediator mediator)
    {
        Name = name;
        _mediator = mediator;
        _mediator.AddCollegue(this);
    }
    public void Send(string to, string message)
    {
        _mediator.Send(this.Name, to, message);
    }
    public void Receive(string from, string message)
    {
        Console.WriteLine($"{from} {message}");
    }
}

class Program
{
    static public void Main()
    {
        var m = new MyMediator();

        var jon = new MyColleague("JON", m);
        var bob = new MyColleague("BOB", m);

        jon.Send(bob.Name, "Hello BOB");
        // JON Hello BOB
        bob.Send(jon.Name, "Hello JON");
        // BOB Hello JON
    }
}

無線でLANを構築している場合、アクセスポイント(ルーター)がMediatorで、クライアントのPCがColleagueに相当し、PC間でメッセージを送り合うシステムを、C#のコンソールプロジェクトで表現しています。

と考えますと、サンプルコードでは色々と足りないものが見えてきますが、そもそもオブジェクト間で通信するようなコードを書く状況に遭遇したことが無いので、これ以上掘り下げずに次のパターンの学習に着手したいと思います。

コメント