装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将对象添加到现有对象中。装饰器提供了一种灵活的方式来扩展类的功能,而不需要通过继承来实现。
下面是一个简单的装饰模式的示例:
首先,我们定义一个接口 Component,它是被装饰对象的基础接口:
public interface Component { void operation(); }
然后,我们定义一个具体的实现类 ConcreteComponent,它实现了 Component 接口:
public class ConcreteComponent implements Component { @Override public void operation() { System.out.println("ConcreteComponent operation"); } }
接下来,我们定义一个装饰器类 Decorator,它也实现了 Component 接口,并且包含一个 Component 类型的成员变量,用于保存被装饰对象的引用:
public abstract class Decorator implements Component { protected Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } }
最后,我们定义具体的装饰器类 ConcreteDecorator,它继承自 Decorator,并且在 operation 方法中添加了额外的功能:
public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } @Override public void operation() { super.operation(); System.out.println("ConcreteDecorator operation"); } }
现在,我们可以使用装饰器来扩展 ConcreteComponent 的功能:
Component component = new ConcreteComponent(); component.operation(); // 输出 "ConcreteComponent operation" Component decorator = new ConcreteDecorator(component); decorator.operation(); // 输出 "ConcreteComponent operation" 和 "ConcreteDecorator operation"
在这个示例中,我们首先创建了一个 ConcreteComponent 对象,然后使用 ConcreteDecorator 对象来装饰它。当我们调用 decorator.operation() 方法时,它会先调用被装饰对象的 operation() 方法,然后再添加额外的功能。这样,我们就可以动态地扩展 ConcreteComponent 的功能,而不需要修改它的代码。