Observer パターン(前編)
2009/01/26 20:34 - デザインパターン
Observer(観察者)という名前がついていますが、観察者というよりもむしろ「通知を受ける者(達)」「受信者(達)」というのが正確なんじゃないかと思います。
イベントドリブンなどにより、何らかの変化が発生するオブジェクトがあるとします(オブジェクトAと仮称します)。
オブジェクトAの変化に対応して何からの処理をおこないたいオブジェクトたちがあるとします(オブジェクトB、オブジェクトC、オブジェクトDの三つを仮定します)。
オブジェクトA側には発信のしくみを付ける、オブジェクトB~D側には受信のしくみを付ける、そのようにして各オブジェクトを連携させるのが Observer パターンと呼ばれるパターンであるようです。 そしてこのとき、オブジェクトB、C、D の側が Observer と呼ばれるクラスです。
<Observer> オブジェクトA─────┬─→オブジェクトB(変化を受信) (変化したことを発信) ├─→オブジェクトC(変化を受信) └─→オブジェクトD(変化を受信)
各オブジェクト間の情報発信・受信で連携という意味では、Mediator と基本的には同じじゃないかなぁという印象を受けました。
たとえば上記オブジェクトA~Dの例で言えば、もうひとつオブジェクトEとしてメディエイタを作っても、それに管理させても同じような処理をおこなうことが可能です。
<Mediator> オブジェクトA──────────→オブジェクトE (変化したことを発信) (Aの変化を受信し、B、C、Dに発信) │ オブジェクトB(変化を受信)←───────┤ オブジェクトC(変化を受信)←───────┤ オブジェクトD(変化を受信)←───────┘
各オブジェクトの連携を、司令官一人が交通整理を担うのが Mediator、それぞれ各オブジェクト同士でおこなうのが Observer ってな感じなんじゃないすかねぇ。 集中処理と分散処理の差とも言えましょうか。
そんな感じで、Mediator と Observer は着目する部分は異なるだけで、同工異曲なパターンなのかなぁという感じを受けました。
次回具体例。