プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

16.Mediator 相手は相談役一人だけ

メンバーはみんな相談役だけに報告し、メンバーの指示は相談役だけからくる。
メンバー同士が状況を探り合ったり指示する必要がなくなる。

f:id:p-monster:20121218195727p:plain

Mediator・・・Colleagueと通信して調整を行うAPI
ConcreteMediator・・・Mediatorの実装を行い、実際の調整をする
Colleague・・・Mediatorと通信を行うAPI
ConcreteColleague・・・Colleagueの実装

複雑に絡み合ったロジックをMediatorで一本化する。
Colleagueはお互いの状態を確認し合わなくても、Mediatorからの指示で正しく動くことができる。
仕様変更があっても修正範囲が広がらない。

オブジェクト指向では一極集中を避け、各オブジェクトに問題を分散させることが多い。
しかし、Mediatorでは分散させるべき問題と集中させるべき問題の切り分けを行う。
通信経路の複雑化を避け、Mediatorに集中させることが目的。

再利用できるものはConcreteColleagueであり、ConcreteMediatorは再利用しにくい。
アプリケーションにおける依存度が高いものは部品と別の場所にまとめる。

関連しているパターン

Facade・・・MediatorパターンではMediator役はColleague役の仲介者を通してやりとりする。FacadeパターンではFacade役が一方的に他の役を利用して高レベルなAPIを作る。Facadeは一方向、Mediatorは双方向
Observer・・・MediatorとColleagueの通信はObserverパターンを使うことがある。

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門