システム監査技術者 2018年 午前2 問22
問題文
デザインパターンの一つであるObserverパターンを利用して実現できることはどれか。
選択肢
ア:あるオブジェクトの状態が変化したときに、それに依存する全てのオブジェクトに自動的に通知する。(正解)
イ:ある機能をもつオブジェクトを新しいオブジェクトでラップし、動的に機能を拡張する。
ウ:あるクラスのインスタンスが一つしか存在しないことを保証する。
エ:配列や集合のような実装の異なるコンテナに対し、同一のインタフェースでアクセスする。
🔒 解説は解答すると表示されます
Observerパターン【午前2解説】
正解の理由
Observerパターンは、あるオブジェクトの状態が変化したとき、そのオブジェクトに依存する複数のオブジェクトへ変更を通知するデザインパターンです。
状態を管理する側を「Subject」、通知を受け取る側を「Observer」として分けます。Subjectの状態が変わると、登録されているObserverへ自動的に通知できます。この仕組みに当てはまるのはアです。
たとえば、天気情報を管理するオブジェクトの状態が変化したとき、複数の画面表示や通知機能へ変更を知らせる場合に利用できます。
解法ステップ
- Observerパターンの中心となる「状態の変化」と「通知」に注目します。
- 選択肢から、状態変化を複数の依存先へ伝える内容を探します。
- 該当するアを選びます。
選択肢別の誤答解説
- ア:状態の変化を、依存するオブジェクトへ自動的に通知します。Observerパターンの説明です。
- イ:既存のオブジェクトをラップし、機能を動的に拡張します。これはDecoratorパターンの説明です。
- ウ:クラスのインスタンスが一つだけ存在することを保証します。これはSingletonパターンの説明です。
- エ:実装の異なる集合などを、共通の方法で順にアクセスできるようにします。これはIteratorパターンの説明です。
よくある誤解
- オブジェクト間の通知全般がObserverパターンだと思う:重要なのは、状態を持つSubjectと、通知を受ける複数のObserverを分け、状態変化を通知する点です。
- 機能を追加するパターンと混同する:既存オブジェクトを包んで機能を拡張するのはDecoratorパターンです。
- 「一つだけ」という言葉からObserverを選ぶ:インスタンスを一つに制限するのはSingletonパターンです。
補足コラム
Observerパターンは、SubjectとObserverを直接強く結び付けずに、状態変化を伝えられる点が利点です。画面表示の更新、イベント通知、購読者への配信などに応用されます。
FAQ
Q. ObserverはSubjectの状態を常に監視しているのですか?
A. 必ずしも常時確認するわけではありません。一般的には、ObserverがSubjectに登録され、Subject側から状態変化を通知します。
A. 必ずしも常時確認するわけではありません。一般的には、ObserverがSubjectに登録され、Subject側から状態変化を通知します。
Q. Observerは一つだけですか?
A. いいえ。Subjectには複数のObserverを登録でき、状態が変化したときにそれぞれへ通知できます。
A. いいえ。Subjectには複数のObserverを登録でき、状態が変化したときにそれぞれへ通知できます。
関連キーワード: Subject、Observer、状態変化通知、Decoratorパターン、Singletonパターン、Iteratorパターン

\ せっかくなら /
システム監査技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

