В Java нет точного аналога механизма декораторов из Python, но можно достичь похожей функциональности с использованием интерфейсов и классов оберток.
В Java можно создать интерфейс, который будет определять основную функциональность, а затем создать классы-обертки, которые будут реализовывать этот интерфейс и дополнять его своей функциональностью. После этого можно создать объекты этих классов-оберток и вызывать их методы как декораторы.
Пример:
```java
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Basic operation");
}
}
class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation();
}
}
class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
public void operation() {
super.operation();
System.out.println("Additional operation A");
}
}
class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
public void operation() {
super.operation();
System.out.println("Additional operation B");
}
}
public class Main {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component = new ConcreteDecoratorB(component);
component.operation();
}
}
```
Этот пример показывает, как можно использовать классы-обертки для добавления дополнительной функциональности к объекту. В данном случае, объект component сначала оборачивается в ConcreteDecoratorA, затем в ConcreteDecoratorB, а затем вызывается метод operation(), который будет выполняться в порядке оборачивания.