• Зачем нужен интерфейс в java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Классический пример - класс логгер. Можно просто не париться и сделать класс Logger со своей реализацией, и везде в клиентском коде (то есть тот код, который этот класс будет использовать) завязать на этот класс.

    Но чу, теперь логи у нас должны храниться не в файлах а в базе, внезапно так. У нас меняется конструктор, у нас меняется реализация всех методов (предположим что у нас он один, log(string message, int level, string category);

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

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

    Так же, если вам нужно часто менять интерфейс то у вас уже какие-то проблемы с построением архитектуры. Интерфейс должен быть простым и должен делать что-то одно.

    А вообще, почитайте про GRASP и SOLID.
    Ответ написан
    2 комментария
  • Какими условными операторами лучше воспользоваться если функция имеет 2 определенных сценария и третий сценарий по умолчанию?

    shineblu
    @shineblu
    Добрый день,

    +1 за switch-case, т.к. мало ли какие-новые параметры/типы книг Вы захотите добавить

    Успехов!
    Ответ написан
    Комментировать