结构型模式-装饰器模式

发布于:2024-12-08 ⋅ 阅读:(107) ⋅ 点赞:(0)

装饰者模式(Decorator Pattern)是一种结构型设计模式,主要用于动态地给对象添加一些额外的职责,而无需修改其代码。通过将对象放入包含行为的装饰器对象中,能够有效地扩展功能,同时保持原始类的结构和代码完整性。

装饰者模式的核心要点

  • 开放/封闭原则:在不修改原始类代码的情况下扩展功能。
  • 动态扩展:相比继承,装饰者模式更灵活,可以在运行时选择装饰器来增强对象功能。
  • 面向接口:装饰者和被装饰对象共享一个公共的接口。

结构

  • 组件(Component):定义一个抽象接口,供具体的组件和装饰器实现。
  • 具体组件(ConcreteComponent):实现组件接口,是被装饰的原始对象。
  • 装饰器(Decorator):实现组件接口,并包含一个对组件对象的引用,用于在其基础上增强功能。
  • 具体装饰器(ConcreteDecorator):扩展装饰器功能,提供具体的附加行为。

Java实现示例

//抽象组件接口:
public interface Component {
    void operation();
}
//具体组件
public class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("基础操作");
    }
}
//抽象装饰器
public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        component.operation();
    }
}
//具体装饰器A和B
public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        System.out.println("装饰器A的增强操作");
    }
}

public class ConcreteDecoratorB extends Decorator {
    public ConcreteDecoratorB(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        System.out.println("装饰器B的增强操作");
    }
}
//测试代码
public class Main {
    public static void main(String[] args) {
        // 创建基础组件
        Component component = new ConcreteComponent();

        // 使用装饰器A增强
        Component decoratorA = new ConcreteDecoratorA(component);

        // 使用装饰器B增强
        Component decoratorB = new ConcreteDecoratorB(decoratorA);

        // 执行最终操作
        decoratorB.operation();
    }
}

适用场景

  • 需要动态扩展一个类的功能。
  • 不希望通过继承增加类的数量。
  • 需要以不同组合方式增强对象的功能。

相比继承,装饰者模式更灵活,适合功能扩展需求频繁变动的场景,比如日志记录、权限校验等功能的实现。


网站公告

今日签到

点亮在社区的每一天
去签到