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

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

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

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

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

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

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 795 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир