Sto cercando di capire il modello di strategia e mi sto chiedendo: la classe di contesto deve avere o posso lasciarla fuori senza compromettere lo scopo del modello?
Avevo l'impressione che avessi bisogno di un qualche tipo di interruttore per leggere diversi tipi di file, ma non volevo semplicemente hackerare qualcosa e poi trattare con il refactoring (anche se, naturalmente, accade sempre che il codice possa essere refactored ma l'idea era: cerca di essere il più intelligente possibile nel design in anticipo ...):
Immaginetrattada
Il cliente può delegare direttamente all'interfaccia della strategia o c'è qualcosa che mi è mancato di capire 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 raffigurato manca la classe di contesto. Il codice aderisce al modello di strategia?