装饰者模式

装饰者模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来动态改变对象的行为。

装饰者模式在 Java 中的应用非常广泛,例如在 Java I/O 类库中就大量使用了装饰者模式。

下面是一个简单的装饰者模式的 Java 实现:

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 是我们的具体组件,ConcreteDecoratorAConcreteDecoratorB 是具体的装饰者,它们在不改变 ConcreteComponent 基础功能的前提下,增加了新的行为。

使用时,我们可以这样:

java 复制代码
Component component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component = new ConcreteDecoratorB(component);
component.operation();

输出结果:

java 复制代码
ConcreteComponent operation
ConcreteDecoratorA added behavior
ConcreteDecoratorB added behavior

这样,我们就实现了在运行时动态地为对象添加新的功能。

相关推荐
一起养小猫4 分钟前
LeetCode100天Day4-盛最多水的容器与两数之和II
java·数据结构·算法·leetcode
ZBritney9 分钟前
JAVA中的多线程
java
whn197712 分钟前
达梦数据库的整体负载变化查看
java·开发语言·数据库
小满、12 分钟前
RabbitMQ:Fanout、Direct、Topic 交换机、队列声明与消息转换器
java·分布式·消息队列·rabbitmq·spring amqp
檀越剑指大厂22 分钟前
【Idea系列】换行处理
java·ide·intellij-idea
kylezhao201934 分钟前
C#23种设计模式-单例模式(Singleton)详解与应用
单例模式·设计模式·c#
wanghowie35 分钟前
01.04 Java基础篇|泛型、注解与反射实战
java·开发语言·windows
深圳佛手38 分钟前
Java大对象(如 List、Map)如何复用?错误的方法是?正确的方法是?
java·jvm·windows
言之。43 分钟前
Claude Code Skills 实用使用手册
java·开发语言
苹果醋343 分钟前
JAVA设计模式之策略模式
java·运维·spring boot·mysql·nginx