Sto cercando di capire il modello di strategia e mi chiedo: la classe di contesto è indispensabile o posso lasciarla fuori senza compromettere lo scopo del modello?
Avevo l'impressione di aver bisogno di una sorta di interruttore per leggere diversi tipi di file, ma non volevo solo hackerare qualcosa e successivamente occuparmi di refactoring (anche se, ovviamente, capita sempre che il codice possa essere refactored ma l'idea era: provare per essere il più intelligente possibile nel design in anticipo ...):
Immagine tratta da Wikimedia
Il client può delegare direttamente all'interfaccia di strategia o c'è qualcosa che ho appena mancato di comprendere sulla classe di contesto?
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();
}
}
Quindi, sopra raffigurata manca la classe di contesto. Il codice aderisce al modello di strategia?