辞書: Mediator

投稿日:

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が主として振る舞うと言ってもよいです。