エンベデッドシステムスペシャリスト 2016年 午前2 問22
問題文
デザインパターンの一つであるObserverパターンを利用して実現できることはどれか。
選択肢
ア:あるオブジェクトの状態が変化したときに、それに依存する全てのオブジェクトに自動的に通知する。(正解)
イ:ある機能をもつオブジェクトを新しいオブジェクトでラップし、動的に機能を拡張する。
ウ:あるクラスのインスタンスが一つしか存在しないことを保証する。
エ:配列や集合のような実装の異なるコンテナに対し、同一のインタフェースでアクセスする。
🔒 解説は解答すると表示されます
Observerパターン【午前2解説】
正解の理由
Observerパターンは、あるオブジェクト(通知する側)の状態が変化したとき、そのオブジェクトを観察する複数のオブジェクト(通知を受ける側)へ自動的に知らせるデザインパターンです。
したがって、状態の変化に応じて依存するオブジェクトへ通知するというアが適切です。通知する側は、通知先それぞれの具体的な処理を直接実装せずに済むため、変更に強く、柔軟な設計にできます。
解法ステップ
- Observerパターンの「Observer」は「観察者」を意味すると確認します。
- 観察者は、対象となるオブジェクトの状態変化を受け取ります。
- 「状態変化に伴う自動通知」に該当する選択肢を選びます。
選択肢別の誤答解説
- ア:状態変化を観察者へ自動通知する説明であり、Observerパターンに該当します。
- イ:既存のオブジェクトをラップして機能を動的に追加する説明です。Decoratorパターンに該当します。
- ウ:クラスのインスタンスが一つだけになるよう保証する説明です。Singletonパターンに該当します。
- エ:異なるコンテナを共通の方法で順にたどる説明です。Iteratorパターンに該当します。
よくある誤解
- Observerパターンは、通知する側が通知先の具体的な処理まで管理する仕組みではありません。通知先との結び付きを弱くできる点が特徴です。
- 通知先は一つとは限りません。状態変化を複数の観察者へ知らせられます。
- ObserverパターンとIteratorパターンは名前が似ていますが、Observerは「状態変化の通知」、Iteratorは「要素の順次取得」を目的とします。
補足コラム
Observerパターンでは、通知する側を「Subject」、通知を受ける側を「Observer」と呼ぶことがあります。SubjectにObserverを登録しておき、状態が変化した際に登録済みのObserverへ通知する構成が基本です。
たとえば、ニュース配信サービスで、新しい記事が公開されたときに登録者へ通知する仕組みがイメージしやすい例です。
FAQ
Q. Observerは、通知を受ける側のことですか?
A. はい。Observerは、Subjectなどの通知する側を観察し、状態変化の通知を受け取る側です。
A. はい。Observerは、Subjectなどの通知する側を観察し、状態変化の通知を受け取る側です。
Q. 通知する側は、Observerの数や具体的な処理を把握する必要がありますか?
A. 通知先を登録・解除する必要はありますが、各Observerの具体的な処理を詳しく知る必要はありません。この疎結合性により、通知先を追加・変更しやすくなります。
A. 通知先を登録・解除する必要はありますが、各Observerの具体的な処理を詳しく知る必要はありません。この疎結合性により、通知先を追加・変更しやすくなります。
関連キーワード: Subject、Observer、状態変化、イベント通知、Decoratorパターン、Singletonパターン、Iteratorパターン

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

