Java中的装饰器模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来为原始对象添加新的行为。这种模式允许你通过将对象拥有的功能划分为一系列不同的层次来灵活地组合这些功能,从而使得系统更加具有扩展性和复用性。
在Java中,装饰器模式的实现需要创建一个实现相同接口的装饰器类,并在这个类中保存原始对象的引用,以便在调用原始对象方法时可以将新增的行为添加到原始对象的行为中。
下面是一个简单的示例代码:
// 定义一个接口
public interface Component {
void operation();
}
// 实现接口的具体类
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent operation.");
}
}
// 装饰器类
public class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operation() {
component.operation();
}
}
// 具体的装饰器类
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
System.out.println("ConcreteDecorator operation.");
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecorator(component);
component.operation();
}
}
在上述示例代码中,Component是一个接口,ConcreteComponent是实现接口的具体类,Decorator是装饰器类,ConcreteDecorator是具体的装饰器类。在测试代码中,首先创建一个ConcreteComponent对象,然后用ConcreteDecorator包装它,最后调用operation方法,输出结果为:
ConcreteComponent operation.
ConcreteDecorator operation.
这表明,调用装饰器对象的operation方法时,它先调用了原始对象的operation方法,然后再添加了自己的行为。