Делегирование в Kotlin – это механизм, позволяющий объекту делегировать часть своих обязанностей другому объекту. Это реализуется без наследования, что способствует более гибкой композиции.
Применяется для:
Kotlin поддерживает делегирование на уровне класса и на уровне свойств.
На уровне класса:
Класс может делегировать реализацию интерфейса другому объекту с помощью оператора by. Это избавляет от необходимости вручную переопределять все методы интерфейса.
kotlin
На уровне свойств:
Значение свойства может быть вычислено через делегат. Esto позволяет реализовать такие паттерны, как ленивая инициализация, наблюдаемые свойства и свойства с возможностью хранения в локальном хранилище потока.
Синтаксис: val <propertyName>: <PropertyType> by <delegateExpression>.
Примеры встроенных делегатов свойств:
lazy: Для ленивой инициализации. Значение вычисляется только при первом доступе к свойству.
kotlin
Delegates.observable: Вызывает заданный блок кода при изменении значения свойства.
kotlin
Delegates.vetoable: Позволяет отменить присвоение нового значения, если условие не выполнено.
kotlin
Создание собственных делегатов свойств:
Реализуются интерфейсы ReadOnlyProperty или ReadWriteProperty.
ReadOnlyProperty: Для val свойств. Метод getValue.ReadWriteProperty: Для var свойств. Методы getValue и setValue.kotlin
Делегирование обеспечивает чистоту кода, улучшает читаемость и способствует применению принципа DRY (Don't Repeat Yourself).