Когда в коде следует использовать интерфейсы (Java)?

Доброго времени суток! Прочитал, что использование интерфейсов в Java важно и является хорошей практикой. Но у меня нет четкого понимая, когда в коде следует их использовать. Я был бы очень рад увидеть примеры использования с обоснованием, почему они используются.
  • Вопрос задан
  • 445 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bedward70
DevMan прав - по парадигме всегда!
На практике - любой написанный код (класс или интерфейс) требует расходов времени на создание и сопровождение. Сопровождать примитивный класс проще, чем примитивный класс и его интерфейс.

Поэтому на практике, обычно, пишут интерфейсы:
1. Как необходимую часть паттернов;
2. Если "интерфейс - это контракт взаимодействия": разрабатывается библиотека или компонент, здесь интерфейсы - это часть неизменяемого контракта;
3. Хорошая практика - все сервисы делать с интерфейсами. К этому подталкивают многие фреймерки JAVA, как пример: Spring и OSGi (Apache Felix);
4. Для JUnit тестировая. Пример: при тестировании бизнес логики, реальные сервисы заменяются тестовыми заглушками. Соотвественно класссы бизнес логики должны использовать интерфейсы, которые при реальной работе земеняются реальными имплементациями, а в тестовом окружении - тестовыми заглушками.
Ответ написан
Комментировать
pazukdev
@pazukdev
Java Dev
1, Абстракция нужна везде, где будет проходить ось изменений системы. А интерфейс - основное средство достижения абстракции в Java. Из этого следует п.2.
2. Всегда, когда нужна абстракция (за исключением случаев, когда абстракция должна обладать состоянием. В таком случае вместо интерфейса придется использовать абстрактный класс т.к. интерфейс не может обладать состоянием).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 11:48
10000 руб./за проект
19 апр. 2024, в 11:14
65000 руб./за проект