Можно ли жестко связать реализацию класса с его интерфейсом?

#java #oop #builder

Вопрос:

Я пытаюсь понять код других людей, и я увидел нечто довольно странное в реализации, касающейся создания конструктора. Хорош ли этот дизайн?

 public interface Car {
 static Builder createBuilder() {
     return new CarImpl.Builder();
 }
 interface Builder {
  /// Setters contract
 }
}
 

Ответ №1:

Как правило, нет, ваш интерфейс должен определять поведение класса (сигнатуру функций), например, в «Автомобиле», отображающем такие функции, как привод, остановка, заправка и т. Д.

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