Как привести методы с разными параметрами к единому интерфейсу? Есть два класса-генератора, например URL'ов. Хочется сделать так, чтобы они реализовывали единый интерфейс и вызывающему коду было без разницы с каким генератором он работает - вызвал метод, получил URL.
Проблема в следующем: для одного и того же метода одному классу требуется чуть больше данных, чем другому. Как разрулить эту ситуацию?
Делать избыточное количество параметров в сигнатуре функции и затем игнорировать их там, где они не нужны как-то не очень. Паттерн адаптер тут тоже не подходит, т.к данные должны приходить извне, а адаптеру придется где-то их самостоятельно получать. Если создавать какой-то абстрактный объект параметров (или массив), то в вызывающем коде нарушается инкапсуляция - нужно знать для чего конкретно мы собираем объект.
Есть еще какие-то варианты, или я уже все перечислил? :)

21 Авг 2019 в 07:04
185 +1
1
Ответы
1

Можно рассмотреть следующий вариант: создать базовый интерфейс с минимальным набором параметров, который покрывает оба класса-генератора. Затем для каждого класса создать свой собственный интерфейс, который будет наследовать базовый интерфейс и добавлять дополнительные параметры, необходимые только этому классу.

Например, пусть у нас есть интерфейс UrlGenerator с методом generateUrl, принимающим общие параметры. Затем у нас есть классы FirstUrlGenerator и SecondUrlGenerator, где FirstUrlGenerator требует дополнительный параметр.

Мы можем создать интерфейс ExtendedUrlGenerator, расширяющий UrlGenerator и добавляющий метод generateUrl с дополнительным параметром. Тогда первый класс реализует интерфейс ExtendedUrlGenerator, в то время как второй - просто UrlGenerator.

Таким образом, классы реализуют разные интерфейсы, но имеют общий базовый метод generateUrl и различаются только набором параметров. Код, использующий эти классы, будет работать с ними через базовый интерфейс, не зная конкретных деталей реализации каждого класса.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир