令和4年度 春期 システムアーキテクト試験 午前Ⅱ 問5
テクノロジ/開発技術デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。 〔クラス図の概要〕コンテキストクラスは,帳票出力ストラテジ抽象クラス(操作:帳票出力())を集約(コンテキストは抽象クラスへの参照をもつだけ)している。帳票出力ストラテジ抽象クラスを,PDF 帳票出力ストラテジクラスと HTML 帳票出力ストラテジクラスがそれぞれ継承し,帳票出力()操作を実装している。凡例:クラスはクラス名・属性・操作の3段で表記する。
出典:令和4年度 春期 システムアーキテクト試験 午前Ⅱ 問5
- アクライアントは,使用したいフォーマットに対応する,帳票出力ストラテジクラスのサブクラスを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振り分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
正解:イ
解説
ストラテジパターンは,アルゴリズム(戦略)をカプセル化した複数の具象クラス(ここでは PDF 帳票出力ストラテジ,HTML 帳票出力ストラテジ)を,共通の抽象クラス(帳票出力ストラテジ)のサブクラスとして用意し,コンテキストクラスがその抽象クラスへの参照を介してアルゴリズムを利用する構成です。新しい出力フォーマットに対応する場合は,抽象クラスを継承した新しいサブクラスを追加するだけでよく,既存のコンテキストクラスや他のストラテジクラスを変更する必要がないため,新規フォーマット用のアルゴリズムの追加が容易になります。
選択肢ごとの解説
- ア誤り。ストラテジパターンでは,クライアント(利用する側)が,どの具象ストラテジ(PDF用かHTML用か)を使うかをコンテキストに設定する必要があり,サブクラスを意識せずに利用できるわけではありません。
- イ正しい。新しい出力フォーマットに対応する具象ストラテジクラスを追加するだけで拡張できるため,新規フォーマット用のアルゴリズムの追加が容易です。
- ウ誤り。図の帳票出力ストラテジクラスは抽象クラスであり,フォーマットの振り分け(どの具象クラスを使うかの選択)は行っていません。振り分けはクライアント側やコンテキストの設定によって行われます。
- エ誤り。帳票出力のアルゴリズムは,コンテキストクラスではなく,PDF帳票出力ストラテジ,HTML帳票出力ストラテジなどの具象ストラテジクラスの中に記述されます。