装饰者模式

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

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

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

相关推荐
今天又在摸鱼1 分钟前
Maven
java·maven
老马啸西风4 分钟前
maven 发布到中央仓库常用脚本-02
java·maven
代码的余温4 分钟前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
一只叫煤球的猫1 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜2 小时前
Maven详解
java·开发语言·maven
Bug退退退1232 小时前
RabbitMQ 高级特性之事务
java·分布式·spring·rabbitmq
程序员秘密基地2 小时前
基于html,css,vue,vscode,idea,,java,springboot,mysql数据库,在线旅游,景点管理系统
java·spring boot·mysql·spring·web3
皮皮林5512 小时前
自从用了CheckStyle插件,代码写的越来越规范了....
java
小码氓2 小时前
Java填充Word模板
java·开发语言·spring·word
会飞的天明2 小时前
Java 导出word 实现饼状图导出--可编辑数据
java·word