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