装饰者模式

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

装饰者模式在 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

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

相关推荐
码熔burning16 分钟前
【MQ篇】初识RabbitMQ保证消息可靠性
java·分布式·rabbitmq·可靠性
北漂老男孩30 分钟前
Spring Boot 自动配置深度解析:从源码结构到设计哲学
java·spring boot·后端
unique_落尘30 分钟前
java操作打印机直接打印及详细linux部署(只适用于机器和打印机处于同一个网段中)
java·linux·打印机
小咕聊编程42 分钟前
【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统
java·spring boot·后端
佩奇的技术笔记1 小时前
Java学习手册:TCP 协议基础
java·tcp/ip
霸道流氓气质1 小时前
Java中将CST格式的时间字符串进行格式化
java
稻草猫.1 小时前
【Java 数据结构】泛型
java·数据结构
-曾牛1 小时前
Spring Boot常用注解详解:实例与核心概念
java·spring boot·后端·spring·java-ee·个人开发·spring boot 注解
苏近之1 小时前
说明白 Rust 中的泛型: 泛型是一种多态
设计模式·rust
FL171713141 小时前
Mujoco & robosuite 机器人模型
xml·java·机器人