Допустим, у нас есть завод чертаFactory Method с ненужными параметрами
trait Factory {
def createObject(paramA, paramB)
}
И теперь у нас есть реализации этого завода - FactoryV1 и FactoryV2, которые выбраны во время выполнения. В то время как FactoryV2 использует оба параметра для создания объекта, FactoryV1 использует только paramA. Поэтому, когда мы вызываем метод createObject FactoryV1, мы передаем ненужный параметр в paramB. Насколько плохо передается дополнительный параметр? Некоторые альтернативы:
Один из способов улучшить это, чтобы иметь paramB как вариант Scala, и в зависимости от завода используется, мы проходим
None
для FactoryV1.createObject иSome
для FactoryV2.createObject.Другой альтернативой было бы иметь два метода в базовом признаке: один с параметром paramA и другой с обоими параметрами. В зависимости от используемой фабрики (V1 или V2) мы вызываем соответствующий метод с 1/2 параметрами (я не вижу очень чистого способа сделать это, хотя).
Что такое другие альтернативы? Я склонен к тому, чтобы иметь один заводский метод с параметрами Option для тех параметров, которые не нужны во всех реализациях фабрики.
По существу, что нам делать, если для фабричных реализаций не нужны все параметры метода Factory?
Вы можете использовать значение по умолчанию для второго параметра. Затем вы можете вызвать свой метод только с первым параметром. см. http://alvinalexander.com/scala/scala-functions-named-default-arguments-parameters-methods – Samar
Перегрузка - это общее решение этой проблемы, хотя вы этого не хотите. Первая перегрузка может просто вызвать вторую перегрузку с помощью значения «Нет» для удобства. –
Я голосую за параметр по умолчанию для второго параметра –