オブジェクト指向設計


Mediator パターン - 仲介者パターン

2008/06/15 01:49Update
TAGS: Mediator | GoF | デザインパターン | OOD | オブジェクト指向設計

MediatorパターンはGoFによる23種類のデザインパターンの振る舞いに関連するパターンの一つです。Mediatorパターンでは、異なるオブジェクト同士は協調して動作する必要がある場合、明示的に参照し合うことをせず、Mediator(仲介者)を介して行います。

Page:  <1|2>

概要


オブジェクト指向のプログラミングでは、オブジェクトは協調し合って動作を完遂します。ここでの「協調」とは、簡単に言えば、「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言語で実装しています。ほかの言語も同じような考え方で結構です。

ソースは次のページをご参照ください

Page:  <1|2>

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments