ストラテジパターンを用いた帳票出力クラス設計【午前2 解説】
要点まとめ
- 結論:ストラテジパターンは新規フォーマット追加が容易な設計を実現するため、拡張性が高いです。
- 根拠:アルゴリズムをクラスごとに分離し、コンテキストがそれらを切り替える構造だからです。
- 差がつくポイント:振り分けをストラテジ内で行わず、コンテキストが戦略を切り替える点を理解しましょう。
正解の理由
正解はイ: 新規フォーマット用のアルゴリズムの追加が容易である。です。
ストラテジパターンは「帳票出力ストラテジ」という抽象クラス(インターフェース)を定義し、具体的な出力形式(PDFやHTML)を具象クラスとして実装します。これにより、新しいフォーマットを追加する際は新たな具象ストラテジクラスを作成し、コンテキストに組み込むだけで済み、既存コードを変更せずに拡張可能です。
よくある誤解
ストラテジパターンは「どの戦略を使うかの判断をストラテジ内で行う」と誤解されがちですが、実際はコンテキストが戦略の切り替えを担当します。
解法ステップ
- 図の構造を確認し、コンテキストとストラテジの関係を把握する。
- ストラテジは抽象クラスで、具象クラスが具体的なアルゴリズムを実装していることを理解する。
- ストラテジパターンの特徴である「アルゴリズムの切り替えが容易」な点を思い出す。
- 選択肢の内容と照らし合わせ、正しい説明を選ぶ。
選択肢別の誤答解説
- ア: クライアントは具象ストラテジのサブクラスを意識せずに利用できるのは正しいが、図の説明からは明確でなく、イの方がより本質的。
- イ: 新規フォーマット追加が容易である点はストラテジパターンの最大の利点であり正解。
- ウ: 振り分けをストラテジクラス内で行うのは誤り。振り分けはコンテキストが担当する。
- エ: アルゴリズムをコンテキストに記述すると拡張性が低下し、ストラテジパターンの目的に反する。
補足コラム
ストラテジパターンは「アルゴリズムのカプセル化」と「切り替えの容易さ」を実現するデザインパターンです。帳票出力のように複数の出力形式が存在する場合に特に有効で、保守性や拡張性を高める設計手法として広く使われています。
FAQ
Q: ストラテジパターンでコンテキストは何をする役割ですか?
A: コンテキストは利用するストラテジ(アルゴリズム)を保持し、必要に応じて切り替え、クライアントに提供します。
Q: 新しい帳票フォーマットを追加する際、既存コードの修正は必要ですか?
A: いいえ。新しい具象ストラテジクラスを追加し、コンテキストに設定するだけで済みます。
関連キーワード: ストラテジパターン、デザインパターン、帳票出力、拡張性、アルゴリズム切り替え