J'essaie de comprendre le modèle de stratégie et je me demande: la classe de contexte est-elle indispensable ou puis-je la laisser sans compromettre l'objectif du modèle?
J'avais l'impression que j'avais besoin d'une sorte de commutateur pour lire différents types de fichiers, mais je ne voulais pas simplement pirater quelque chose et traiter plus tard du refactoring (bien que, bien sûr, il arrive toujours que le code puisse être refactoré, mais l'idée était: essayez pour être le plus intelligent possible dans la conception au préalable ...):
Image prise à partir de wikimedia
Le client peut-il déléguer directement à l'interface de stratégie ou y a-t-il quelque chose que j'ai manqué de comprendre à propos de la classe de contexte?
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();
}
}
Ainsi, la classe de contexte ci-dessus est manquante. Le code adhère-t-il au modèle de stratégie?