クイズの説明
Step 3「GoFデザインパターン — 生成パターン」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。
問題
Q1. Factory Method パターンの主な目的はどれですか?
- A) オブジェクトの状態を保存・復元する
- B) オブジェクトの生成をサブクラスに委ね、呼び出し側を具体クラスから解放する
- C) オブジェクトのインスタンスを1つだけに制限する
- D) 複雑なオブジェクトを段階的に構築する
答えを見る
正解: B
Factory Method パターンは、オブジェクトの生成をサブクラスに委ねることで、呼び出し側が具体クラスを知らなくてもオブジェクトを生成できるようにするパターンです。
Q2. Abstract Factory パターンが Factory Method と異なる点はどれですか?
- A) 抽象クラスを使う点
- B) 関連するオブジェクト群をまとめて生成する点
- C) 静的メソッドを使う点
- D) 継承を使わない点
答えを見る
正解: B
Abstract Factory は Factory Method と異なり、単一のオブジェクトではなく関連するオブジェクトのファミリー(群)をまとめて生成します。これにより、ファミリー全体の一貫性が保証されます。
Q3. Builder パターンを使うべき場面はどれですか?
- A) クラスのインスタンスを1つだけにしたいとき
- B) コンストラクタの引数が多く、一部はオプショナルなとき
- C) 既存のオブジェクトをコピーして新しいオブジェクトを作りたいとき
- D) 異なるプラットフォーム用のオブジェクトを生成したいとき
答えを見る
正解: B
Builder パターンは、コンストラクタの引数が多く複雑なオブジェクトを段階的に構築したいときに適しています。メソッドチェーンで必要なプロパティだけを設定でき、可読性が向上します。
Q4. Singleton パターンの最大の欠点はどれですか?
- A) メモリ使用量が増える
- B) 実装が難しい
- C) グローバル状態を隠蔽し、テストが困難になる
- D) パフォーマンスが低下する
答えを見る
正解: C
Singleton はグローバル状態を隠蔽するため、依存関係が見えにくくなり、テスト時にモックへの差し替えが困難になります。代替として、DI(依存性注入)コンテナによるスコープ管理が推奨されます。
Q5. Prototype パターンで「深いコピー(Deep Clone)」が必要になるのはどんなときですか?
- A) プリミティブ型のプロパティだけを持つとき
- B) 他のオブジェクトを参照するプロパティを持つとき
- C) static メソッドを持つとき
- D) コンストラクタが private のとき
答えを見る
正解: B
オブジェクトが他のオブジェクトを参照するプロパティ(配列やネストされたオブジェクト)を持つ場合、浅いコピーでは参照が共有されてしまいます。深いコピーにより、参照先のオブジェクトも独立したコピーを作成する必要があります。
Q6. 次のコードはどのパターンを使っていますか?
const user = User.builder()
.name('Takahashi')
.email('takahashi@example.com')
.role('architect')
.build();
- A) Factory Method
- B) Abstract Factory
- C) Builder
- D) Prototype
答えを見る
正解: C
メソッドチェーンで段階的にプロパティを設定し、最後に build() でオブジェクトを生成する形式は Builder パターンの典型的な使い方です。
Q7. Factory Method パターンと最も関連が深いSOLID原則はどれですか?
- A) SRP と LSP
- B) OCP と DIP
- C) ISP と SRP
- D) LSP と ISP
答えを見る
正解: B
Factory Method は OCP(新しい種類の追加で既存コードを変更しない)と DIP(呼び出し側が具体クラスではなくインターフェースに依存する)を実現するパターンです。
Q8. プロトタイプレジストリの役割として最も適切なものはどれですか?
- A) オブジェクトのインスタンス数を制限する
- B) テンプレートとなるオブジェクトを登録し、名前でクローンを取得できるようにする
- C) オブジェクトの依存関係を自動解決する
- D) オブジェクトの生成ログを記録する
答えを見る
正解: B
プロトタイプレジストリは、よく使うオブジェクトをテンプレートとして登録しておき、名前を指定してクローン(複製)を取得できるようにする仕組みです。元のテンプレートは変更されません。
結果
7問以上正解の場合
合格です。 生成パターンの基本をしっかり理解しています。次の Step 4 では、構造パターンと振る舞いパターンを学びます。パターンの引き出しが広がります。
6問以下の場合
もう少し復習しましょう。 Step 3 のレッスンを再度読み返し、各パターンの「目的」「構造」「使い分け」を整理してください。特に Factory Method と Abstract Factory の違い、Builder と Prototype の使い分けを重点的に確認しましょう。