You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在创建executor对象时动态切换TCP/UDP发送功能?

用策略模式解决你的问题

这完全是策略模式的典型应用场景——把变化的行为(UDP/TCP发送)抽离成独立的策略类,让依赖这个行为的executor类通过组合而非继承来使用策略,从而实现运行时动态切换。

步骤1:定义统一的发送策略接口

先创建一个抽象接口,规定所有发送类必须实现的方法:

interface Sender {
    void sendPayload(byte[] payload);
}

步骤2:让现有发送类实现接口

修改udpSender和tcpSender,让它们实现上面的Sender接口:

class udpSender implements Sender {
    @Override
    public void sendPayload(byte[] payload) {
        // 你的UDP发送逻辑
    }
}

class tcpSender implements Sender {
    @Override
    public void sendPayload(byte[] payload) {
        // 你的TCP发送逻辑
    }
}

步骤3:重构executor类

去掉executor对具体发送类的继承,改为通过构造函数注入Sender实例,所有需要发送的地方都调用这个注入的实例方法:

class executor {
    private final Sender sender;

    // 构造时传入具体的发送策略
    public executor(Sender sender) {
        this.sender = sender;
    }

    // 示例配置方法,其他方法同理修改
    public void configureRemoteDevice(byte[] configData) {
        // 原有业务逻辑保持不变
        // ...
        // 发送时调用注入的sender方法
        sender.sendPayload(configData);
    }
}

步骤4:动态切换发送方式

现在创建executor对象时,只需传入不同的Sender实现即可:

// 创建使用UDP发送的executor
executor udpExecutor = new executor(new udpSender());
udpExecutor.configureRemoteDevice(configBytes);

// 创建使用TCP发送的executor
executor tcpExecutor = new executor(new tcpSender());
tcpExecutor.configureRemoteDevice(configBytes);

优势

  • 彻底摆脱了继承带来的紧耦合,executor只依赖抽象的Sender接口,和具体发送实现解耦
  • 新增其他发送方式(比如MQTT、HTTP)时,只需新增一个实现Sender的类,完全不用修改executor的代码
  • 运行时就能切换发送策略,不用再编译前修改基类

内容的提问来源于stack exchange,提问作者Denis Schaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:20:09