Estou tentando entender o padrão de estratégia e me perguntando: a classe de contexto deve ter ou posso deixar de fora sem comprometer o objetivo do padrão?
Fiquei com a impressão de que precisava de algum tipo de opção para ler diferentes tipos de arquivos, mas não queria apenas invadir algo e depois lidar com a refatoração (embora, é claro, sempre aconteça que o código possa ser refatorado, mas a ideia era: tente para ser o mais inteligente possível no design de antemão ...):
Imagem retirada da wikimedia
O cliente pode delegar diretamente para a interface Strategy ou há algo que eu perdi de entender sobre a classe de contexto?
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();
}
}
Portanto, acima é mostrada a classe de contexto ausente. O código adere ao padrão de estratégia?