Estoy tratando de entender el patrón de estrategia y me pregunto: ¿es imprescindible la clase de contexto o puedo dejarla sin comprometer el propósito del patrón?
Tenía la impresión de que necesitaba algún tipo de cambio para leer diferentes tipos de archivos, pero no quería simplemente hackear algo y luego tratar con la refactorización (aunque, por supuesto, siempre sucede que el código se puede refactorizar, pero la idea era: intentar ser lo más inteligente posible en el diseño de antemano ...):
Imagen tomada de wikimedia
¿Puede el cliente delegar directamente en la interfaz de la Estrategia o hay algo que acabo de perder de entender sobre la clase 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();
}
}
Entonces, arriba se muestra la clase de contexto que falta. ¿Se adhiere el código al patrón de estrategia?