Я намагаюся зрозуміти схему стратегії і запитую себе: чи повинен бути контекстний клас обов'язковим чи можна його залишити без шкоди для мети шаблону?
У мене було враження, що мені потрібен якийсь комутатор для читання файлів різних типів, але я не хотів просто щось зламати і пізніше займатися рефакторингом (хоча, звичайно, завжди трапляється, що код можна відновити, але ідея була: спробуйте заздалегідь бути максимально розумним у дизайні ...):
Зображення, зняте з Вікімедії
Чи може клієнт делегувати безпосередньо інтерфейс стратегії чи щось я просто пропустив, щоб зрозуміти про контекстний клас?
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();
}
}
Отже, вище зображено відсутність контекстного класу. Чи дотримується код стратегії?