私は戦略パターンを理解しようとして自分自身に問いかけています。コンテキストクラスはなくてはならないのですか、それともパターンの目的を損なうことなく省略できますか?
さまざまな種類のファイルを読み取るためになんらかのスイッチが必要であるという印象を受けましたが、何かをハックして後でリファクタリングを処理したくありませんでした(もちろん、コードは常にリファクタリングされる可能性がありますが、アイデアは:設計をできるだけスマートにするために...):
クライアントはストラテジーインターフェイスに直接委任できますか、それともコンテキストクラスについて理解できなかったことがありますか?
interface Reader {
// read information from file and fill data list field of Client
readFile();
}
class ExcelReader implements Reader{ /* */ }
class PdfReader implements Reader{ /* */}
class Client{
// strategic choice
Reader r;
// data list field
List<Data> data;
// Client Constructor
public Client(){
if(<file ends in .xls>)
r = new ExcelReader();
else
r = new PdfReader();
r.readFile();
}
}
したがって、上記のコンテキストクラスはありません。コードは戦略パターンに準拠していますか?