Observerパターンって、そうなんだぁ。。。

Observerパターンについて

Observerパターンは振る舞いに関するデザインパターンの1つです。
そして、Observerパターンを導入することで、依存関係のあるオブジェクトをそれぞれ異なるオブジェクトとしてカプセル化することができます。

実際にObserverパターンを組み込む場合、Observerパターンではsubjectobserverの2種類のオブジェクトが登場します。
そして、それぞれのオブジェクトが以下の役割を持っています。

  • subject

subjectは自分に依存するすべてのobserverを把握しています。
そして、任意のobserverから変更の通知を受けた場合、自分に依存するすべてのobserverへ更新の依頼を行います。

  • observer

observerはイベントを発生させることで、subjectに対してobserver自身の状態を通知します。
そして、subjectの状態を受け取ることで、observer自身の状態をsubjectの状態と同期させます。

Observerパターンの更新プロトコル

  • PUSHモデル

Observerの要求有無とは無関係に更新情報をObserverに送る方法

  • PULLモデル

Observerが必要な時に更新情報をSubjectから受け取る方法

MVCで使用されているデザインパターンの1つ

ObserverパターンはMVCアーキテクチャを構成するためのデザインパターンの1つとして使用されています。
なお、Observerパターンの構成要素とMVCの対応箇所は、以下のとおりです。

  • Observer:View
  • Subject:Model

このため、MVCアーキテクチャでは、Viewで発生したイベントがModelに伝わり、Modelはイベントを受け取ることで自信を更新します。
そして、最新の状態になったModelは、自分が関連するViewを更新するような振る舞いをします。
実際には、MVCアーキテクチャはViewで発生したイベントをControlerで受け取り、ControlerがModelを更新します。
そして、Modelの更新をViewに通知することでViewが最新の状態になるようです。

MVVMの場合

MVVMでは、ViewModelとModelがObserver的なつながりをしているようです。
これは、Viewが画面のレイアウトを担当しており、イベントの処理や画面に表示するデータはViewModelが担当しているためです。
そして、ViewはViewModelを監視することで、ViewModelにある表示データの変更をViewに反映しています。

そのため、ViewModelがModelを更新し、そして、Modelの更新をViewModelで受けることになります。
そして、ViewModelがModelの更新を受け付けることをViewが感知することでViewが更新されるようです。

デザインパターンアーキテクチャをしっかり学びたいなら

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

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

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

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)