開発
Mediatorパターン
makuta
突然ですが、もめているグループを想像してみてください。
同じ立場のメンバーが10人集まって、共同作業をしていますが、なかなかまとまりがつきません。メンバーが互いに指示を出しあって、作業は大混乱します。また、お互いに作業の詳細に首を突っ込んで、もめごとが起こっています。
そんなところに、立場の異なる「相談役」が登場して、こう言いました。「メンバーの皆さんは、相談役の私に状況を報告してください。そうしたら、私は全体を考慮した上で皆さんに指示を出しましょう。でも私は、みなさんの仕事の詳細まではとやかくいいませんからね。」と。全てのメンバーがこの相談役の言うことを了承して、話はまとまりました。
メンバーはみんな相談役にだけ報告をして、メンバーへの指示は相談役だけから来るようになりました。そして、メンバー同士が状況をさぐりあったり支持しあうことはなくなりました。
「Mediator」とは「仲介者」「調停者」という意味です。わかりやすくするとグループにやってきた頼りになる「相談役」を想像するのがよいでしょう。困ったことがあったら、相談役に知らせる。全体に波及する出来事が起こったら、相談役に知らせる。相談役から言われたことは素直に実行する。グループの各メンバーが勝手に他のメンバーと相談をして判断をするのではなく、いつも頼りになる相談役を通して行動を起こすようにする。一方、相談役はグループのメンバーから上がってきた報告を元に大局的な判断を行い、各メンバーに指示を出す。
Mediatorパターンは、このようなパターンです。
Mediatorパターンの定義
オブジェクト群の相互作用をカプセル化するオブジェクトを定義する。
Mediatorパターンは、オブジェクト同士がお互いを明示的に参照し合うことがないようにして、結合度を低めることを促進する。それにより、オブジェクトの相互作用を独立に変えることができるようになる。
このパターンは、複雑に絡み合った複数のオブジェクト間の関係を、必ず「仲介者」を介して処理を行う様にすることで単純かつ明快なインタフェースを提供するパターンです。つまり、「Mediator」パターンとは、管轄下にある複数のオブジェクト各々からの問い合わせを受け、適宜判断を行い、管轄下にあるオブジェクト全体、または一部へ指示を出す「仲介人」の役割を果たすクラスを利用するパターンです。
Mediatorパターンの使用場面
- クラスのオブジェクト同士の協調関係が煩雑なとき
- クラスの責任を単一化にしたいとき
- クラスのオブジェクト同士の協調関係を集中管理にしたいとき
Mediatorパターンの利点は、
- クラスに必要だけの責任を持つことで、各クラスの責任を明確にすることができる
- オブジェクト間の協調関係をMediatorで集中管理することができる
- 協調しあうオブジェクト同士は直接参照しないようにすることで、元々オブジェクト間の「N対N」の関係をMediatorとの「1対1」の関係にまで単純化することができ、各クラス間の依存度を下げ、低結合度を実現することができる
ということです。ということで、複雑なクラス間のやりとりを一元管理するMediatorパターンについてでした。