📜  设计模式-装饰器模式(1)

📅  最后修改于: 2023-12-03 15:12:08.664000             🧑  作者: Mango

设计模式-装饰器模式

什么是装饰器模式?

装饰器模式是一种结构型设计模式,它允许你动态地将新功能添加到已经存在的对象中。 这种模式创建了一个包装对象,它可以在执行原始对象的所有操作之前或之后执行自己的操作,从而扩展对象的行为。

装饰器模式的组成部分
Component

Component 是一个接口或者抽象类,它定义了被装饰者和装饰者的公共接口。

public interface Component {
    void operation();
}
ConcreteComponent

ConcreteComponent 是具体的组件类,它实现了 Component 接口,并定义了需要被装饰的基础功能。

public class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("I am a ConcreteComponent.");
    }
}
Decorator

Decorator 是一个包装器或者抽象类,它实现了 Component 接口,并在类中维护了一个 Component 类型的对象。

public abstract class Decorator implements Component {
    private Component component;
    public Decorator(Component component) {
        this.component = component;
    }
    public void operation() {
        component.operation();
    }
}
ConcreteDecorator

ConcreteDecorator 是具体的装饰器类,它继承自 Decorator,并添加了一些自己的功能。

public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }
    public void operation() {
        super.operation();
        addBehavior();
    }
    private void addBehavior() {
        System.out.println("I am a ConcreteDecorator.");
    }
}
装饰器模式的应用场景
  • 在不影响其他对象的情况下,动态地向一个对象添加新功能。
  • 为多个对象添加相同的功能。比如在一组对象中添加一些通用的功能。
  • 用于保护现有对象的关键代码,而不必在每次使用时都进行修改。
装饰器模式的优缺点
优点
  • 比继承更为灵活,可以动态地给对象新增功能,而不需要创建新的子类。
  • 可以把多个装饰器依次加入到一个对象中,增强它的功能。
缺点
  • 使用装饰器模式会导致设计复杂度增加。
  • 对于装饰链过长时,会导致代码可读性下降。
总结

装饰器模式是一种动态扩展对象功能的设计模式,它通过包装已有的对象,并在运行时动态地增加新的行为,来扩展对象的功能。装饰器模式与继承相比,更为灵活。但是当装饰者过多或装饰链过长时,会导致代码可读性降低。因此,开发者需要掌握如何在项目中正确地使用装饰器模式,以获得最佳的设计效果。