Можешь привести пример использования принципа D в SOLID

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

Ответ

Принцип Dependency Inversion (D) в SOLID гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня — оба должны зависеть от абстракций.

Пример:
Допустим, у нас есть класс UserRepository, который работает с базой данных. Вместо жесткой привязки к конкретной БД (например, SQLite), мы используем интерфейс:

interface Database {
    fun save(user: User)
}

class SQLiteDatabase : Database {
    override fun save(user: User) {
        // Реализация сохранения в SQLite
    }
}

class UserRepository(private val db: Database) {
    fun addUser(user: User) {
        db.save(user)
    }
}

Теперь UserRepository зависит от абстракции (Database), а не от конкретной реализации. Это позволяет легко менять базу данных (например, на Room или Firebase) без изменения кода UserRepository.