Back to questions
Junior — Middle
74
Каким образом можно добавить расширенную функциональность в существующие классы в Java без модификации их исходного кода?
Answer from AI
sobes.tech AI
В Java для добавления расширенной функциональности в существующие классы без изменения их исходного кода часто используют паттерн "Декоратор" или композицию.
Кроме того, начиная с Java 8, можно использовать default методы в интерфейсах, которые позволяют добавлять методы с реализацией, не изменяя классы, которые эти интерфейсы реализуют.
В Android и Kotlin можно применять расширения (extension functions), но в чистом Java такого механизма нет.
Пример использования декоратора:
interface Printer {
void print(String message);
}
class SimplePrinter implements Printer {
public void print(String message) {
System.out.println(message);
}
}
class DecoratorPrinter implements Printer {
private Printer wrapped;
public DecoratorPrinter(Printer wrapped) {
this.wrapped = wrapped;
}
public void print(String message) {
// Добавляем функциональность
System.out.print("[Decorated] ");
wrapped.print(message);
}
}
// Использование
Printer printer = new DecoratorPrinter(new SimplePrinter());
printer.print("Hello");
Таким образом, расширение функциональности достигается за счет оборачивания объекта, а не изменения исходного класса.