令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17
テクノロジ/開発技術デザインパターンの中のストラテジパターンを用いて,帳票出力のクラスを図のとおりに設計した。適切な説明はどれか。

出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問17
- アクライアントは,使用したいフォーマットに対応する,帳票出力ストラテジクラスのサブクラスを意識せずに利用できる。
- イ新規フォーマット用のアルゴリズムの追加が容易である。
- ウ帳票出力ストラテジクラスの中で,どのフォーマットで帳票を出力するかの振り分けを行っている。
- エ帳票出力のアルゴリズムは,コンテキストクラスの中に記述する。
正解:イ
解説
ストラテジパターンは,交換可能なアルゴリズムを共通のインタフェースをもつクラス群としてカプセル化し,利用側がそれを差し替えられるようにするデザインパターンです。図では「帳票出力ストラテジ」が共通インタフェースを定め,「PDF 帳票出力ストラテジ」「HTML 帳票出力ストラテジ」がそれを継承して具体的な出力アルゴリズムを実装しています。コンテキストは帳票出力ストラテジを集約して利用するだけなので,新しいフォーマットを追加したいときは新しいサブクラスを作るだけでよく,既存のクラスを修正する必要がありません。
選択肢ごとの解説
- ア誤り。どのフォーマットで出力するかを決めて具象ストラテジをコンテキストに設定するのはクライアントの役割なので,クライアントはサブクラスの存在を意識する必要があります。サブクラスを意識せずに利用できるのは,生成をカプセル化するファクトリ系のパターンを併用した場合です。
- イ正しい。新しいフォーマットに対応するには帳票出力ストラテジを継承したサブクラスを追加するだけでよく,コンテキストや既存のサブクラスを変更せずにアルゴリズムを追加できます。
- ウ誤り。ストラテジパターンでは,どのアルゴリズムを使うかの振り分けは利用側(クライアント)が行い,抽象クラスである帳票出力ストラテジの中に条件分岐を書くことはしません。振り分けを内部に書くと,追加のたびに修正が必要になりパターンの利点が失われます。
- エ誤り。帳票出力のアルゴリズムは具象ストラテジである PDF 帳票出力ストラテジや HTML 帳票出力ストラテジの中に記述します。コンテキストクラスにアルゴリズムを書くのは,ストラテジパターンを適用する前の設計です。