Я пытаюсь понять шаблон стратегии и спрашиваю себя: должен ли быть контекстный класс или я могу оставить его без компромисса с целью шаблона?
У меня сложилось впечатление, что мне нужен какой-то переключатель для чтения разных типов файлов, но я не хотел просто что-то взламывать, а потом заниматься рефакторингом (хотя, конечно, всегда бывает, что код можно реорганизовать, но идея была в следующем: try быть максимально умным в дизайне заранее ...)
Изображение взято из Викимедиа
Может ли клиент делегировать напрямую интерфейсу Стратегии, или я что-то упустил, чтобы понять о классе контекста?
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();
}
}
Итак, на рисунке выше отсутствует контекстный класс. Код придерживается шаблона стратегии?