Назад к вопросам
Middle+
70
questionbank

Расскажите о принципе разделения интерфейсов (Interface Segregation Principle).

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Принцип разделения интерфейсов (ISP) гласит: клиенты не должны зависеть от интерфейсов, которые они не используют.

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

Преимущества следования ISP:

  • Снижение связанности: Изменения в одном методе большого интерфейса не затрагивают клиентов, которые не используют этот метод.
  • Более гибкий код: Легче добавлять новые реализации, так как они обязаны реализовывать только нужные интерфейсы.
  • Улучшенная читаемость: Код становится понятнее, когда интерфейсы четко определяют конкретные обязанности.

Пример:

Вместо:

interface Worker {
    void work();
    void eat();
    void sleep();
}

Лучше:

interface Workable {
    void work();
}

interface Eatable {
    void eat();
}

interface Sleepable {
    void sleep();
}

Тогда класс HumanWorker может реализовать все три:

class HumanWorker implements Workable, Eatable, Sleepable {
    @Override
    public void work() {
        // ...
    }

    @Override
    public void eat() {
        // ...
    }

    @Override
    public void sleep() {
        // ...
    }
}

А какой-нибудь RobotWorker только Workable:

class RobotWorker implements Workable {
    @Override
    public void work() {
        // ...
    }
}