ホーム > システムアーキテクト試験 > 2015年
システムアーキテクト試験 2015年 午前2 問05
デザインパターンの中のストラテジパターンを用いて、帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。

イ:新規フォーマット用のアルゴリズムの追加が容易である。(正解)
ウ:帳票出カストラテジクラスの中で、どのフォーマットで帳票を出力するかの振り分けを行っている。
エ:帳票出力のアルゴリズムは、コンテキストクラスの中に記述する。
ア:クライアントは、使用したいフォーマットに対応する、帳票出カストラテジクラスのサブクラスを意識せずに利用できる。
解説
ストラテジパターンを用いた帳票出力クラス設計【午前2 解説】
要点まとめ
- 結論:ストラテジパターンは新規フォーマット追加が容易で、拡張性に優れる設計手法です。
- 根拠:アルゴリズムをクラスごとに分離し、コンテキストが切り替えを担うため、既存コードを変更せずに新規戦略を追加可能です。
- 差がつくポイント:振り分けをストラテジ内で行わず、コンテキストが戦略を保持・切り替える点を正しく理解することが重要です。
正解の理由
イ: 新規フォーマット用のアルゴリズムの追加が容易である。が正解です。
ストラテジパターンは「アルゴリズムをクラスとして分離し、コンテキストがそれらを切り替えて利用する」設計です。
このため、新しい帳票フォーマットを追加する際は、帳票出力ストラテジのサブクラスを新たに作成し、帳票出力メソッドを実装するだけで済みます。既存のコンテキストや他のストラテジクラスを変更する必要がなく、拡張に強い設計となっています。
ストラテジパターンは「アルゴリズムをクラスとして分離し、コンテキストがそれらを切り替えて利用する」設計です。
このため、新しい帳票フォーマットを追加する際は、帳票出力ストラテジのサブクラスを新たに作成し、帳票出力メソッドを実装するだけで済みます。既存のコンテキストや他のストラテジクラスを変更する必要がなく、拡張に強い設計となっています。
よくある誤解
ストラテジパターンで「どのフォーマットを使うかの振り分けをストラテジクラス内で行う」と誤解しがちですが、振り分けはコンテキストが担います。
また、アルゴリズムをコンテキストに直接書くのはパターンの趣旨に反します。
また、アルゴリズムをコンテキストに直接書くのはパターンの趣旨に反します。
解法ステップ
- ストラテジパターンの基本構造を理解する(コンテキスト+戦略インターフェース+具体的戦略クラス)。
- 図のクラス関係を確認し、コンテキストが帳票出力ストラテジを集約していることを把握する。
- 具体的な帳票出力はPDFやHTMLのサブクラスで実装されていることを確認する。
- 新規フォーマット追加は新たなストラテジクラスを作るだけで済むことから、拡張性が高いと判断する。
- 選択肢の内容と照らし合わせて正しい説明を選ぶ。
選択肢別の誤答解説
- ア: クライアントはサブクラスを意識せずに利用できるのは正しいが、ストラテジパターンの本質的な説明としては不十分であり、誤解を招く表現です。
- イ: 新規フォーマット用のアルゴリズム追加が容易であるため正解。
- ウ: 振り分けはコンテキストが行い、ストラテジクラス内で振り分けを行うのは誤りです。
- エ: アルゴリズムはストラテジクラスに記述し、コンテキストには記述しません。
補足コラム
ストラテジパターンは「行動に関するデザインパターン」の一つで、アルゴリズムの切り替えを柔軟に行うために用いられます。
帳票出力のように複数の出力形式が存在し、将来的に増える可能性がある場合に特に有効です。
また、オープン・クローズド原則(拡張には開いていて、修正には閉じている)を満たす設計としても評価されます。
帳票出力のように複数の出力形式が存在し、将来的に増える可能性がある場合に特に有効です。
また、オープン・クローズド原則(拡張には開いていて、修正には閉じている)を満たす設計としても評価されます。
FAQ
Q: ストラテジパターンでコンテキストの役割は何ですか?
A: コンテキストは利用するストラテジ(アルゴリズム)を保持し、必要に応じて切り替えて利用する役割を持ちます。
A: コンテキストは利用するストラテジ(アルゴリズム)を保持し、必要に応じて切り替えて利用する役割を持ちます。
Q: 新しい帳票フォーマットを追加する際、既存のコードはどうなりますか?
A: 新しいストラテジクラスを追加するだけで、既存のコンテキストや他のストラテジクラスは変更不要です。
A: 新しいストラテジクラスを追加するだけで、既存のコンテキストや他のストラテジクラスは変更不要です。
Q: ストラテジパターンと状態パターンの違いは?
A: ストラテジパターンはアルゴリズムの切り替えに使い、状態パターンはオブジェクトの状態変化に伴う振る舞いの変更に使います。
A: ストラテジパターンはアルゴリズムの切り替えに使い、状態パターンはオブジェクトの状態変化に伴う振る舞いの変更に使います。
関連キーワード: ストラテジパターン, デザインパターン, 拡張性, 帳票出力, アルゴリズム切り替え, オープン・クローズド原則