クイズの説明
Step 4「GoFデザインパターン — 構造・振る舞いパターン」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。
問題
Q1. Adapter パターンの主な目的はどれですか?
- A) オブジェクトに動的に機能を追加する
- B) 互換性のないインターフェースを接続する
- C) 複雑なサブシステムにシンプルな窓口を提供する
- D) 部分と全体を同じインターフェースで扱う
答えを見る
正解: B
Adapter パターンは、互換性のないインターフェースを持つクラスを、既存のインターフェースに適合させるパターンです。電源アダプターのように、異なる規格を橋渡しします。
Q2. 次のコードが使っているデザインパターンはどれですか?
class LoggingClient implements HttpClient {
constructor(private wrapped: HttpClient) {}
request(url: string): Promise<Response> {
console.log(`Request: ${url}`);
return this.wrapped.request(url);
}
}
- A) Adapter
- B) Decorator
- C) Proxy
- D) Facade
答えを見る
正解: B
同じインターフェース(HttpClient)を実装し、内部に同じインターフェースのオブジェクトをラップして機能(ログ出力)を追加しています。これは Decorator パターンの典型的な実装です。
Q3. Facade パターンを使うべき場面はどれですか?
- A) 1つのクラスに異なるアルゴリズムを切り替えたいとき
- B) 複数のサブシステムの操作を1つの統一インターフェースでまとめたいとき
- C) オブジェクトの状態変化を通知したいとき
- D) 操作の Undo/Redo を実装したいとき
答えを見る
正解: B
Facade パターンは、複雑なサブシステム群に対してシンプルな統一インターフェースを提供します。呼び出し側がサブシステムの詳細を知る必要がなくなります。
Q4. Composite パターンの「葉(Leaf)」と「複合要素(Composite)」の共通点はどれですか?
- A) どちらも子要素を持てる
- B) どちらも同じインターフェースを実装する
- C) どちらもシングルトンである
- D) どちらも抽象クラスを継承する
答えを見る
正解: B
Composite パターンでは、葉(個々の要素)と複合要素(子を持つコンテナ)が同じインターフェースを実装します。これにより、呼び出し側は個々の要素とグループを区別せずに統一的に扱えます。
Q5. Strategy パターンと Template Method パターンの違いとして正しいのはどれですか?
- A) Strategy は継承、Template Method は委譲で実現する
- B) Strategy は委譲(合成)、Template Method は継承で実現する
- C) Strategy はクラスの数を減らし、Template Method は増やす
- D) 違いはなく、同じパターンの別名である
答えを見る
正解: B
Strategy パターンはアルゴリズムをインターフェースとして定義し、実行時にオブジェクトを差し替える(委譲/合成)。Template Method パターンは基底クラスで処理の骨格を定義し、サブクラスで具体的なステップを実装する(継承)。
Q6. Observer パターンにおいて、Subject が Observer に通知する方法として最も適切なのはどれですか?
- A) グローバル変数を通じて通知する
- B) Observer が定期的に Subject をポーリングする
- C) Subject が登録された Observer のメソッドを順番に呼び出す
- D) データベースにイベントを書き込み、Observer が読む
答えを見る
正解: C
Observer パターンでは、Subject がイベント発生時に登録されたすべての Observer のメソッドを呼び出します(プッシュ型通知)。Observer は事前に Subject に登録(subscribe)しておきます。
Q7. Command パターンで Undo を実現するために必要な条件はどれですか?
- A) コマンドが実行前の状態を保持していること
- B) すべてのコマンドが非同期であること
- C) コマンドがシングルトンであること
- D) コマンドが不変オブジェクトであること
答えを見る
正解: A
Undo を実現するには、各コマンドが実行前の状態を記憶しておく必要があります。例えば、テキスト削除コマンドは削除したテキストを保持しておき、Undo 時にそのテキストを復元します。
Q8. Decorator パターンと継承の違いとして最も重要なのはどれですか?
- A) Decorator の方が実行速度が速い
- B) Decorator は実行時に動的に機能を追加・組み合わせできる
- C) 継承の方がメモリ効率が良い
- D) Decorator はインターフェースを変更する
答えを見る
正解: B
Decorator パターンの最大の利点は、実行時に動的に機能を追加・組み合わせできることです。継承はコンパイル時に固定されますが、Decorator はラッピングの順序や組み合わせを自由に変更できます。
結果
7問以上正解の場合
合格です。 構造パターンと振る舞いパターンの基本をしっかり理解しています。次の Step 5 では、これらの知識を活かしてリファクタリングの技法を学びます。
6問以下の場合
もう少し復習しましょう。 Step 4 のレッスンを再度読み返し、各パターンの「目的」「構造」「使い分け」を整理してください。特に Adapter vs Decorator、Strategy vs Template Method の違いを重点的に確認しましょう。