Можно добавить функциональность в уже существующий тип с помощью следующих подходов:
Функции-расширения (Extension Functions): Позволяют добавлять новые функции к существующим классам без необходимости их наследования или изменения исходного кода.
kotlin
Декоратор (Decorator Pattern): Создается новый класс, который оборачивает существующий объект и добавляет новую функциональность, сохраняя исходный интерфейс.
Компоновщик (Composite Pattern) и Стратегия (Strategy Pattern): Могут быть использованы для более сложных случаев, когда функциональность зависит от состояния или динамически выбирается.
Адаптер (Adapter Pattern): Позволяет использовать существующий класс с интерфейсом, который отличается от требуемого.
Замещающий (Proxy Pattern): Предоставляет заменитель или посредник для другого объекта для контроля доступа к нему или добавления дополнительной функциональности.