@foonfyrick

Как обращаться к классу через интерфейс?

Я не совсем понимаю как и для чего, я прочитал что обращение к методам класса через интерфейс упрощает внесение изменений в будущем. Вот я написал такой пример, и не вижу что он где упрощает.
interface IServer {
    fun getData()
}
class Server:IServer {
    override fun getData() {
        println("... getting data")
    }
}

class Client(val iServer: IServer) {
    fun connect(){
        println("connecting...")
        iServer.getData()
    }
}

fun main(){
  val client = Client(Server())
    client.connect()
}
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день!
В фреймворках например, в том же Spring, реализован такой принцип, как DI (dependency injection). Все сводится к тому, что вы можете внедрить интерфейс, вместо самой реализации. Это упрощает процесс тестирования и разработки, так как вы можете "подсунуть" другую реализацию этого интерфейса. Например, на production вам нужно подключиться к реальной БД и использовать соответствующие репозитории, а во время тестирования вы можете замокать другие реализации интерфейса.
Допустим, что у вас есть интерфейс IServer с методом connect()
А реализации у него могут быть разные. Например,
FtpConnect implements IServer,  SshConnect implements IServer
Соответственно, внедрив зависимость IServer в код, вы можете указать какая реализация данного интерфейса должны быть внедрена.
Посмотрите на фреймворки:
Guice -
https://www.baeldung.com/guice
Dagger -
https://dagger.dev/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы