Зависимости внутри системы лучше строить от интерфейсов или абстрактных классов? Когда лучше использовать абстрактный класс и когда интерфейс? Например, у нас есть компонент логирования. Мы можем создать AbstractLogger с реализацией по-умолчанию и унаследовать все свои логгеры от него, в конструкторах или сеттерах других классов указывать что они принимают в параметре логгер типа AbstractLogger.
На сколько это правильно? Может лучше использовать интерфейс? Например мы можем создать LoggerInterface, в конструкторах или сеттерах других классов указывать что они принимают в параметре логгер типа LoggerInterface, а например реализацию по-умолчанию реализовать в AbstractLogger который реализует несколько методов из LoggerInterface, таким образом я могу сам решать - унаследоваться от AbstractLogger который для меня уже реализовал несколько методов из интерфейса или если меня эта реализация не устраивает я могу написать свою реализовав LoggerInterface.
По-моему зависимости внутри системы от интерфейсов более гибкие.
Подскажите, пожалуйста, как правильно определить когда использовать интерфейс и когда абстрактный класс?

21 Авг 2019 в 07:03
168 +1
1
Ответы
1

Использование абстрактных классов и интерфейсов зависит от конкретной ситуации и требований проекта.

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

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

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

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

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