Делегирование в Kotlin
Делегирование -- это шаблон ООП, позволяющий одному объекту перенаправить запросы другому объекту. В каком-то смысле делегирование может быть альтернативой наследованию. У языка программирования Kotlin в этом случае есть плюс: он нативно поддерживает вышеописанный паттерн, предоставляя нужный инструментарий.
Формальный синтаксис выглядит следующим образом:
Итак, у нас присутствует интерфейс Base, определяющий некоторый функционал. Также присутствует его реализация в качестве класса BaseImpl. Существует и класс Derived, тоже использующий интерфейс Base, при этом после указания используемого интерфейса следует ключевое слово by, ну а уже после него -- объект, которому непосредственно и будут делегироваться вызовы.
Таким образом, в нашей схеме класс Derived станет делегировать вызовы объекту someBase (объект представляет интерфейс Base, а также передается через первичный конструктор). Также следует понимать, что Derived может и не реализовать интерфейс Base либо сделать это не в полной мере (будут реализованы лишь отдельные функции и свойства).
Например, рассмотрим следующие классы:
Идем дальше. У нас определен интерфейс Messenger, условно представляющий программу по отправке сообщений, для чего определена функция
Кроме того, существует класс InstantMessenger, представляющий собой, по сути, программу мгновенных сообщений (мессенджер). Он задействует интерфейс Messenger и реализует его функцию
Потом определен класс SmartPhone, представляющий, соответственно, смартфон -- он тоже использует интерфейс Messenger, однако не реализует его, так как вместо реализации он принимает объект Messenger через первичный конструктор, делегируя ему обращение к функции
Теперь применим классы:
Итак, мы создали объект pixel, представляющий класс SmartPhone. Так как SmartPhone использует интерфейс Messenger, у нас есть возможность в целях отправки условного сообщения вызвать у объекта pixel функцию
В следующий раз поговорим про множественное делегирование.
По материалам https://metanit.com/.
Хотите знать о Kotlin больше? Обратите внимание на следующий курс.