C#でメディエーターデザインパターンを使用する方法

デザインパターンは、一般的なデザインの問題を解決し、コードの複雑さを軽減するために使用されます。メディエーターパターンは、オブジェクト間の疎結合を促進し、オブジェクト間通信のコードを整理するのに役立つ動作設計パターンです。

この記事では、メディエーターのデザインパターンと、C#を使用して実装する方法について説明します。

メディエーターのデザインパターンとは何ですか? 

相互に通信しているオブジェクトが多数あるアプリケーションを想像してみてください。メディエーターデザインパターンは、オブジェクトの数が非常に多くなり、オブジェクトへの参照を維持することが困難になる場合に役立ちます。メディエーターは基本的に、1つ以上のオブジェクトが互いにどのように相互作用するかをカプセル化するオブジェクトです。メディエーターデザインパターンは、これらのオブジェクトの通信方法を制御し、管理する必要のあるオブジェクト間の依存関係の数を減らすのに役立ちます。

メディエーターのデザインパターンでは、オブジェクトは相互に直接通信するのではなく、メディエーターを介して通信します。オブジェクトが別のオブジェクトまたはオブジェクトのセットと通信する必要がある場合、メッセージをメディエーターに送信します。次に、メディエーターは、メッセージを理解できる形式で各レシーバーオブジェクトに送信します。

オブジェクト間の直接通信を排除することにより、メディエーターのデザインパターンは疎結合を促進します。メディエーターデザインパターンを使用するもう1つの利点は、コードの可読性と保守性が向上することです。良い尺度として、メディエーターパターンの公式のGang ofFourの定義は次のとおりです。

オブジェクトのセットがどのように相互作用するかをカプセル化するオブジェクトを定義します。メディエーターは、オブジェクトが相互に明示的に参照しないようにすることで疎結合を促進し、オブジェクトの相互作用を個別に変更できるようにします。

メディエーターのデザインパターンはファサードのデザインパターンとは異なることに注意してください。メディエーターパターンは、オブジェクトのセットがどのように相互作用するかを容易にしますが、ファサードパターンは、アプリケーションのインターフェイスのセットに統合されたインターフェイスを提供するだけです。したがって、メディエーターパターンはオブジェクトの動作を処理する動作パターンであり、ファサードパターンはオブジェクトの構成を処理する構造パターンです。

C#でのメディエーターデザインパターンの実装

しかし、十分な概念があります。いくつかのコードを見てみましょう。この設計の参加者は、メディエーター、具体的なメディエーター、および1つ以上の参加者タイプです。メディエーターは参加者と通信するためのインターフェースを定義する責任がありますが、具体的なメディエーターは、その名前が示すように、メディエーターインターフェースを実装し、参加者の知識を持っています。参加者タイプは、同僚と呼ばれることもあることに注意してください。したがって、一部の実装では、同僚と具体的な同僚のタイプがあります。

ここで、次のインターフェイスを参照してください。これは、この例で使用するメディエーターのインターフェースです。

パブリックインターフェイスImediator

    {{

        void AddParticipant(IParticipant参加者);

        void BroadcastMessage(string message、IParticipant sender);

    }

このインタフェースは、二つの方法の宣言が含まれていることに注意してください、AddParticipant と BroadcastMessage。前者は、ConcreteMediator クラスが管理する参加者のリストに参加者を追加するために 使用されますが(以下に示す)、後者は、参加者のリストにメッセージをブロードキャストするために使用されます。

これが ConcreteMediator クラスです。IMediator インターフェイスを実装し ます。BroadcastMessage メソッドの実装は あなたが記入できるようにしておきます。

パブリッククラスConcreteMediator:Imediator

    {{

        参加者のリスト= new List();

        public void AddParticipant(IParticipant参加者)

        {{

            参加者。追加(参加者);

        }

        public void BroadcastMessage(string message、IParticipant sender)

        {{

            //ここにコードを記述して、参加者にメッセージをブロードキャストします

        }

    }

IParticipantインタフェースは、宣言含ま SendMessage 方法。

パブリックインターフェイスIparticipant

    {{

        void SendMessage(string message);

    }

具体的な参加者クラスの例を次に示します。これらのクラスはIParticipant インターフェースを実装していることに注意してください 。

パブリッククラスConcreteParticipant1:Iparticipant

    {{

        保護されたIMediatorメディエーター。

        public ConcreteParticipant1(IMediatorメディエーター)

        {{

            this.mediator =メディエーター;

        }

        public void SendMessage(string message)

        {{

            mediator.SendMessage(message、this);

        }

    }

    パブリッククラスConcreteParticipant2:Iparticipant

    {{

        保護されたIMediatorメディエーター。

        public ConcreteParticipant2(IMediatorメディエーター)

        {{

            this.mediator =メディエーター;

        }

        public void SendMessage(string message)

        {{

            mediator.SendMessage(message、this);

        }

    }

以上です!次のコードスニペットは、これまでに作成したすべてのタイプを使用する方法を示しています。

static void Main(string [] args)

    {{

        IMediatorメディエーター=新しいConcreteMediator();

        I参加者participant1 =新しいConcreteParticipant1(メディエーター);

        I参加者participant2 =新しいConcreteParticipant2(メディエーター);

        mediator.AddParticipant(participant1);

        mediator.AddParticipant(participant2);

        参加者1.SendMessage( "これは最初の参加者です");

        参加者2.SendMessage( "これは2番目の参加者です");

        Console.ReadLine();

    }

メディエーターデザインパターンは、異種オブジェクト間の通信を仲介することによって疎結合を促進する動作パターンです。メディエーターはオブジェクト間のすべての相互作用を促進するため、これらのオブジェクトは自由に変更できます。最も重要なことは、彼らはお互いの知識を持っている必要がないということです。したがって、メディエーターパターンは、適切に構造化され、保守可能で、簡単にテストできるコードを作成するのに役立ちます。