平成25年度 秋期 システムアーキテクト試験 午前Ⅱ 問4
テクノロジ/開発技術デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。この帳票出力ストラテジクラスの説明のうち,適切なものはどれか。

出典:平成25年度 秋期 システムアーキテクト試験 午前Ⅱ 問4
- アクライアントは,どの帳票出力ストラテジクラスがどのフォーマットに対応するかを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
正解:イ
解説
ストラテジパターンは,アルゴリズム(処理方式)をカプセル化し,実行時に切り替え可能にするデザインパターンです。設問の図では,帳票出力ストラテジという抽象クラス(インタフェース)を,PDF 帳票出力ストラテジ,HTML 帳票出力ストラテジという具象クラスが実装(継承)しており,コンテキストクラスはこれらの具象クラスを意識せずに帳票出力ストラテジを呼び出します。このような構造では,新しい出力フォーマット(アルゴリズム)を追加したい場合,新たな具象ストラテジクラスを追加するだけでよく,既存のコンテキストクラスや他のストラテジクラスに変更を加える必要がないため,新規フォーマット用のアルゴリズムの追加が容易になります。
選択肢ごとの解説
- ア誤り。クライアント(コンテキスト)がどのフォーマットに対応するストラテジクラスかを意識せずに利用できることはストラテジパターンの利点の一つですが,これは帳票出力ストラテジクラス(抽象クラス)自体の説明というよりコンテキストとの関係の説明であり,設問が問う帳票出力ストラテジクラスの説明としては,イの記述の方がより直接的です。
- イ正しい。ストラテジパターンでは,新しいアルゴリズム(フォーマット)に対応する具象ストラテジクラスを追加するだけで機能拡張でき,新規フォーマット用のアルゴリズムの追加が容易です。
- ウ誤り。どのフォーマットで出力するかの振分けは,帳票出力ストラテジクラス自身ではなく,具体的な具象クラスを選択・保持するコンテキストクラス側の責務です。
- エ誤り。帳票出力のアルゴリズムは,コンテキストクラスではなく,PDF 帳票出力ストラテジや HTML 帳票出力ストラテジなどの具象ストラテジクラスの中に記述されます。