装饰者模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来动态改变对象的行为。
装饰者模式在 Java 中的应用非常广泛,例如在 Java I/O 类库中就大量使用了装饰者模式。
下面是一个简单的装饰者模式的 Java 实现:
- // 定义组件接口
- public interface Component {
- void operation();
- }
-
- // 定义具体组件
- public class ConcreteComponent implements Component {
- @Override
- public void operation() {
- System.out.println("ConcreteComponent operation");
- }
- }
-
- // 定义装饰者基类
- public abstract class Decorator implements Component {
- protected Component component;
-
- public Decorator(Component component) {
- this.component = component;
- }
-
- @Override
- public void operation() {
- component.operation();
- }
- }
-
- // 定义具体装饰者
- public class ConcreteDecoratorA extends Decorator {
- public ConcreteDecoratorA(Component component) {
- super(component);
- }
-
- @Override
- public void operation() {
- super.operation();
- addedBehavior();
- }
-
- public void addedBehavior() {
- System.out.println("ConcreteDecoratorA added behavior");
- }
- }
-
- public class ConcreteDecoratorB extends Decorator {
- public ConcreteDecoratorB(Component component) {
- super(component);
- }
-
- @Override
- public void operation() {
- super.operation();
- addedBehavior();
- }
-
- public void addedBehavior() {
- System.out.println("ConcreteDecoratorB added behavior");
- }
- }
在这个例子中,ConcreteComponent
是我们的具体组件,ConcreteDecoratorA
和 ConcreteDecoratorB
是具体的装饰者,它们在不改变 ConcreteComponent
基础功能的前提下,增加了新的行为。
使用时,我们可以这样:
- Component component = new ConcreteComponent();
- component = new ConcreteDecoratorA(component);
- component = new ConcreteDecoratorB(component);
- component.operation();
输出结果:
- ConcreteComponent operation
- ConcreteDecoratorA added behavior
- ConcreteDecoratorB added behavior
这样,我们就实现了在运行时动态地为对象添加新的功能。