Mediator パターン - 仲介者パターン
2008/06/15 01:49Update
MediatorパターンはGoFによる23種類のデザインパターンの振る舞いに関連するパターンの一つです。Mediatorパターンでは、異なるオブジェクト同士は協調して動作する必要がある場合、明示的に参照し合うことをせず、Mediator(仲介者)を介して行います。
概要
オブジェクト指向のプログラミングでは、オブジェクトは協調し合って動作を完遂します。ここでの「協調」とは、簡単に言えば、「AオブジェクトはBオブジェクトを呼ぶ」ことを協調といいます。
Mediatorパターンでは、このようなオブジェクト同士の協調を直接ではなく、Mediator を介して行うようにします:
「AオブジェクトはBオブジェクトを呼ぶな」、「AオブジェクトはBオブジェクトを呼ぶなら、Mediatorを介して行おう」
ここまで、皆さんは「なぜAオブジェクトはBオブジェクトを呼ぶな」という疑問を持っているかもしれません。
「部屋探し」との例から説明します。
皆さんは「部屋探し」なら「部屋の仲介会社」にいきますようね。
なぜ「部屋の仲介会社」にいきますか?
「部屋の仲介会社」に「部屋」があるからです。
でも、実際に「部屋の仲介会社」は「部屋」を持っていません。「部屋」を持っているのは「貸主」です。
なぜ「借主」は実際に「部屋」を持っている「貸主」と直接交渉しませんか?
原因は次の通りです。
◇ 部屋の契約まで、いろいろ手続きや注意事項があります。
◇ 「借主」は自分の仕事があるため、「部屋を借りる」だけのために、これらの「手続きや注意事項」を勉強したくありません。
◇ 「貸主」も「部屋を貸す」だけのために、これらの「手続きや注意事項」を勉強したくありません。
◇ 「借主」も「貸主」もできるだけ多くの相手と取引したいのです。
◇ 「部屋の仲介会社」は「豊富な仲介知識」を持つことで、「借主」と「貸主」両方の問題を解決してくれます。
Mediatorパターンの使用シーン
◇ クラスのオブジェクト同士の協調関係が煩雑であること
◇ クラスの責任を単一化にしたいこと
◇ クラスのオブジェクト同士の協調関係を集中管理にしたいこと
メリット
◇ クラスに必要だけの責任を持つことで、各クラスの責任を明確することができます。
◇ オブジェクト間の協調関係をMediatorで集中管理することができます。
◇ 協調しあうオブジェクト同士は直接参照しないようにすることで、元々オブジェクト間の「N対N」の関係をMediatorとの「1対1」の関係にまで単純化することができ、各クラス間の依存度を下げ、低結合度を実現することができます。
Mediator パターンのクラス図
Mediator
仲介者抽象クラス
ConcreteMediator
仲介者の具体的な実装クラス
Colleague
協調しあうクラス同士の抽象クラス
ConcreteColleague
Colleagueの実装クラス
Mediator パターンの使用例
「部屋探し」の例をMediator パターンでの実装は次の通りです。
※Java言語で実装しています。ほかの言語も同じような考え方で結構です。
ソースは次のページをご参照ください
Sponsored Link
- Relative Articles
- ASP.NETでのフロント・コントローラ(Front Controller)実装 - (2009/10/20 15:22)
- Factory Method パターン - ファクトリメソッドパターン - (2008/06/09 22:44)
- Abstract Factory パターン - 抽象ファクトリパターン - (2008/06/10 13:25)
- Singleton パターン - シングルトンパターン - (2008/06/10 15:36)
- Prototypeパターン - プロトタイプパターン - (2008/06/10 17:23)
- Builderパターン - ビルダーパターン - (2008/06/10 19:01)
- Adapter パターン - アダプターパターン - (2008/06/11 11:30)
- Composite パターン - コンポジットパターン - (2008/06/11 16:59)
- Interpreter パターン - インタプリタパターン - (2008/06/13 15:42)
- Chain of Responsibility パターン - 責任の連鎖パターン - (2008/06/14 00:28)
