Mediatorとは
デザインパターンの1つです。
概要
例として、A, B, C, Dというオブジェクトがあり、 それぞれの変更を、別のオブジェクトに通知する必要がある場合を考えます。 この場合、最大4x3=12通りの組み合わせが考えられます。
当然ですが、これはめんどくさく、相互に依存が発生してしまっています。 そのために使われるのがMediatorパターンです。
Xというオブジェクトを用意し、XはA, B, Cを知っているものとします。 逆に、A, B, CはXのみ知っています。 この場合、最大4x2=8通りの組み合わせで対応可能です。
- X -> A, B, C, D
- A, B, C, D -> X
ただ、XがA〜Dに依存して、A〜DがXに依存するという相互依存は解消されていません。 あくまで組み合わせ爆発を避けるための手法です。 なので、個人的には「便利だけど美しくないなぁ」という感じです。 もっとドライに付き合ったほうが良さそうですが。
Observerパターンとの違い
Mediatorパターンと似たものに、Observerパターンがありますが、 一番の違いは、「主従関係があるかどうか」だと思います。
Observerパターンを使うのは、オブジェクトA、Bに明らかな主従関係があって、 BはAに依存してもいいが、AはBに依存してはいけない状況に使います。 例えば、テキストフィールド(input要素)と、イベントハンドラの関係の場合、 イベントハンドラはテキストフィールドに依存しますが、 その逆は依存しません。
実装には制御の逆転を使用します。
Mediatorパターンを使うのは、オブジェクト間に主従関係が見当たらない場合です。 この場合、Mediatorが主として振る舞うと言ってもよいです。