DataSpiderにおけるコンポーネント間のインタラクションの設計と実装、のクラス図とシーケンス図

この記事はDataSpiderにおけるコンポーネント間のインタラクションの設計と実装 : 小野和俊のブログの勝手に補足記事です。
コードが良くわからなかったので図を書いてみた。
詳細な説明は元記事へどうぞ。

最も原始的な実装方法: コンポーネントの相互参照

コンポーネントは、処理に必要なコンポーネントへの参照を直接持っている。


この例ぐらいだと非常にシンプルだが、コンポーネント間が密結合しているため、機能を拡張したいときに問題となる。

Mediatorパターン


コンポーネントは、別のコンポーネントを直接持つ代わりにMediatorへの参照を持っている。
Mediatorは、コンポーネントからのリクエストに応じて適切なコンポーネントに指示を出す。

Role Objectパターン

DIっぽい仕組みが導入されたりして複雑なので、処理に関係ないところは簡略化してあります(本当はコンポーネントがSelectionServiceを直接持つのではなく、プロバイダ経由で取得する)

一見Mediatorと似てるが、SelectionServiceはコンポーネントと依存していない。
このクラスの責務は「イベントが通知されたときに、対応するコールバックを呼ぶ」というもの。そのイベントが発火したときに実際どういう処理を行うかは、コンポーネント側が判断する。

図: コンポーネントは初期化時にイベントのコールバックを登録する

以上です