ストラテジパターンを用いた帳票出力ストラテジクラスの設計【午前2 解説】
要点まとめ
- 結論:ストラテジパターンは新規フォーマット追加が容易な設計を実現するため、イの「新規フォーマット用のアルゴリズムの追加が容易である」が正解です。
- 根拠:アルゴリズムをクラスごとに分離し、コンテキストが切り替え可能なため、拡張性が高く保守性も向上します。
- 差がつくポイント:ストラテジパターンの本質は「アルゴリズムの切り替えをクライアントに意識させずに行うこと」と「新しい戦略の追加が容易なこと」を理解することです。
正解の理由
ストラテジパターンは「アルゴリズムをクラスとして分離し、実行時に切り替え可能にする」設計手法です。
図の「帳票出力ストラテジ」クラスは抽象的な帳票出力のインターフェースを持ち、PDFやHTMLなど具体的なフォーマットはそれを継承したクラスで実装されています。
この構造により、新しいフォーマットを追加したい場合は新たなストラテジクラスを作成し、既存コードを変更せずに拡張できます。
したがって、「新規フォーマット用のアルゴリズムの追加が容易である」イが正解です。
よくある誤解
ストラテジパターンは「どのフォーマットを使うかの振り分けをストラテジクラス内で行う」わけではありません。
また、アルゴリズムをコンテキストに書くのも誤りで、分離が目的です。
解法ステップ
- ストラテジパターンの基本構造を理解する(コンテキスト+複数のストラテジ)
- 図のクラス構成を確認し、抽象クラスと具体クラスの関係を把握する
- ストラテジパターンの特徴である「アルゴリズムの切り替え容易性」と「拡張性」を考慮する
- 選択肢の内容とパターンの特徴を照合し、正しい説明を選ぶ
選択肢別の誤答解説
- ア: クライアントはフォーマットを意識せず利用できるのは正しいが、説明としては不十分であり、拡張性の観点が重要なので不適切です。
- イ: 新規フォーマット追加が容易であることはストラテジパターンの最大の利点であり、正解です。
- ウ: フォーマットの振り分けはコンテキストやクライアント側で行い、ストラテジクラス内で行うのは誤りです。
- エ: アルゴリズムはストラテジクラスに記述し、コンテキストには記述しません。コンテキストは切り替え役です。
補足コラム
ストラテジパターンは「行動に関するデザインパターン」の一つで、同じ処理を異なる方法で実装したい場合に有効です。
帳票出力のようにフォーマットが増える可能性がある処理に適用すると、コードの変更を最小限に抑えられます。
また、オープン・クローズド原則(拡張には開いていて、修正には閉じている)を満たす設計としても評価されます。
FAQ
Q: ストラテジパターンと状態パターンの違いは何ですか?
A: ストラテジパターンはアルゴリズムの切り替えに使い、状態パターンはオブジェクトの状態変化に応じた振る舞いの切り替えに使います。
Q: コンテキストクラスは何を担当しますか?
A: コンテキストはストラテジを保持し、必要に応じてストラテジのメソッドを呼び出す役割を持ちます。
関連キーワード: ストラテジパターン、デザインパターン、帳票出力、拡張性、オープン・クローズド原則