Предположим, у меня есть интерфейс с именем «Контроллер». Несколько классов реализуют этот интерфейс, и я не знаю этих классов (например, имена классов находятся в xml-файле). Теперь, чтобы эти классы, реализующие контроллер, работали, им нужно получить ссылки на другие объекты (возможно, объекты данных). И это мой вопрос, а именно, каков наилучший способ инициализации таких объектов (объектов Controller)?
Я подумал о нескольких решениях, но я не совсем уверен, какой здесь лучший подход.
Первый : При создании экземпляра объекта из имени класса я мог бы искать «специальный» конструктор (с помощью отражения), который имеет ссылки на объекты, необходимые объекту Controller. Но из того, что я прочитал в других вопросах, это менее вероятно хорошее решение, потому что я бы заставил специальный конструктор существовать в классе. И иногда я читаю, что размышления вообще являются злом и их лучше избегать.
Второй : Я добавляю специальный метод init (a, b, c) к интерфейсу Controller, который должен вызываться непосредственно после создания объекта. Это заставило бы последовательность вызовов (сначала init (..), затем rest) к объекту, чтобы заставить его работать, что, вероятно, тоже плохо. Кстати, init () - методы вообще плохо в интерфейсах?
Третий : После прочтения этого комментария я подумал о следующем: вместо того, чтобы иметь имя класса класса, реализующего интерфейс контроллера (в файле xml), у меня есть имя класса фабрики, которая принадлежит конкретному классу контроллеров. И эта фабрика будет реализовывать интерфейс с методом createController (a, b, c), и тогда фабрика будет знать, какой класс ей нужно создать, а также какой конструктор будет вызывать для переноса других ссылок (например, объектов данных). Недостатком этого может быть дополнительный класс только для создания экземпляра класса Controller и, возможно, небольшие накладные расходы в целом.
Какой, по вашему мнению, лучший способ сделать это? Или вы можете придумать что-то еще, что может быть лучше, чем эти три способа?
Спасибо!