QUIZ 30分

クイズの説明

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 の違いを重点的に確認しましょう。