Делегирование в Kotlin | OTUS

Делегирование в Kotlin

Делегирование -- это шаблон ООП, позволяющий одному объекту перенаправить запросы другому объекту. В каком-то смысле делегирование может быть альтернативой наследованию. У языка программирования Kotlin в этом случае есть плюс: он нативно поддерживает вышеописанный паттерн, предоставляя нужный инструментарий.

Формальный синтаксис выглядит следующим образом:

1-20219-ade56f.png

Итак, у нас присутствует интерфейс Base, определяющий некоторый функционал. Также присутствует его реализация в качестве класса BaseImpl. Существует и класс Derived, тоже использующий интерфейс Base, при этом после указания используемого интерфейса следует ключевое слово by, ну а уже после него -- объект, которому непосредственно и будут делегироваться вызовы.

2-20219-5086fd.png

Таким образом, в нашей схеме класс Derived станет делегировать вызовы объекту someBase (объект представляет интерфейс Base, а также передается через первичный конструктор). Также следует понимать, что Derived может и не реализовать интерфейс Base либо сделать это не в полной мере (будут реализованы лишь отдельные функции и свойства).

Например, рассмотрим следующие классы:

3-20219-696ad4.png

Идем дальше. У нас определен интерфейс Messenger, условно представляющий программу по отправке сообщений, для чего определена функция send().

Кроме того, существует класс InstantMessenger, представляющий собой, по сути, программу мгновенных сообщений (мессенджер). Он задействует интерфейс Messenger и реализует его функцию send().

Потом определен класс SmartPhone, представляющий, соответственно, смартфон -- он тоже использует интерфейс Messenger, однако не реализует его, так как вместо реализации он принимает объект Messenger через первичный конструктор, делегируя ему обращение к функции send().

Теперь применим классы:

4-20219-87680a.png

Итак, мы создали объект pixel, представляющий класс SmartPhone. Так как SmartPhone использует интерфейс Messenger, у нас есть возможность в целях отправки условного сообщения вызвать у объекта pixel функцию send(). Но важно понимать, что сам по себе класс SmartPhone НЕ реализует send-функцию, так как непосредственное выполнение данной функции делегируется объекту telegram, и именно он в реальности отправляет сообщение. Следовательно, при выполнении нашего программного кода мы увидим консольный вывод следующего характера:

5-20219-878a86.png

В следующий раз поговорим про множественное делегирование.

По материалам https://metanit.com/.

1-20219-357d45.png

Хотите знать о Kotlin больше? Обратите внимание на следующий курс.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто