@a_ovchinnikov
Web developer

Как привести методы с разными параметрами к единому интерфейсу?

Есть два класса-генератора, например URL'ов. Хочется сделать так, чтобы они реализовывали единый интерфейс и вызывающему коду было без разницы с каким генератором он работает - вызвал метод, получил URL.

Проблема в следующем: для одного и того же метода одному классу требуется чуть больше данных, чем другому. Как разрулить эту ситуацию?

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

Есть еще какие-то варианты, или я уже все перечислил? :)
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
GavriKos
@GavriKos
Правильно ли я понял:
у вас есть класс А, который содержит N параметров.
есть класс Construct_1, который делает что то на основе M параметров, где M - подмножество N
есть класс Construct_2, который делает что то, похожее на действия Construct_1 на основе M` параметров, где M` - подмножество N.
Вы хотите чтобы C_1 и C_2 были объединены одним интерфейсом. Т.е. кто то извне создает С_1 или С_2 в зависимости от условий, передает его например в A, и A вызывает общий метод, давая туда нужные данные, но не зная что перед ним - Construct_1 или Construct_2?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы