Что такое принцип разделения интерфейсов

«Что такое принцип разделения интерфейсов» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип разделения интерфейсов (ISP) гласит, что клиенты не должны зависеть от интерфейсов, которые они не используют. Лучше иметь много специализированных интерфейсов, чем один общий.

Пример:

// Плохо - один интерфейс для всего
interface Worker {
    fun work()
    fun eat()
}

// Лучше - разделенные интерфейсы
interface Workable {
    fun work()
}

interface Eatable {
    fun eat()
}

class Human : Workable, Eatable {
    override fun work() { /*...*/ }
    override fun eat() { /*...*/ }
}

class Robot : Workable {
    override fun work() { /*...*/ }
}

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

  • Уменьшает связанность
  • Делает код более гибким
  • Упрощает поддержку
  • Позволяет избежать "пустых" реализаций методов