Что такое принцип разделения интерфейсов (Interface Segregation Principle) в SOLID?

«Что такое принцип разделения интерфейсов (Interface Segregation Principle) в SOLID?» — вопрос из категории ООП, который задают на 22% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип разделения интерфейсов (Interface Segregation Principle, ISP) — один из принципов SOLID, который гласит: «Клиенты не должны зависеть от интерфейсов, которые они не используют».

Суть принципа: Вместо одного «толстого» интерфейса с множеством методов следует создавать несколько узкоспециализированных интерфейсов. Это избавляет классы от необходимости реализовывать ненужную функциональность.

Проблема (нарушение ISP):

interface Worker {
    void code();
    void test();
    void deploy();
    void cook(); // Метод, не относящийся к программисту
}

class Programmer implements Worker {
    public void code() { /* ... */ }
    public void test() { /* ... */ }
    public void deploy() { /* ... */ }
    public void cook() { /* Пустая реализация или исключение */ }
}

Решение (следование ISP):

interface Coder {
    void code();
}
interface Tester {
    void test();
}
interface DevOps {
    void deploy();
}
interface Chef {
    void cook();
}

class Programmer implements Coder, Tester {
    public void code() { /* ... */ }
    public void test() { /* ... */ }
    // Не реализует ненужные интерфейсы
}

Преимущества:

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