Ich versuche, das Strategiemuster zu verstehen und frage mich: Ist die Kontextklasse ein Muss oder kann ich sie weglassen, ohne den Zweck des Musters zu beeinträchtigen?
Ich hatte den Eindruck, ich brauchte eine Art Schalter zum Lesen verschiedener Dateitypen, wollte aber nicht nur etwas hacken und mich später mit Refactoring befassen (obwohl es natürlich immer vorkommt, dass Code refactored werden kann, aber die Idee war: try um vorher so schlau wie möglich im Design zu sein ...):
Bild aus Wikimedia genommen
Kann der Client direkt an die Strategieoberfläche delegieren oder gibt es etwas, das ich gerade über die Kontextklasse nicht verstanden habe?
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();
}
}
Oben abgebildet fehlt also die Kontextklasse. Entspricht der Code dem Strategiemuster?