尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

设备指令下发设计模式

设备指令下发设计模式
📅 发布时间:2026/6/18 21:20:25

策略模式(Strategy Pattern) + 工厂模式(Factory Pattern) + 命令模式(Command Pattern)

1. 策略模式

封装不同设备的指令生成算法

// 策略接口
public interface CommandGenerateStrategy {/*** 生成特定设备的下发指令字节数组* @param cmdType 指令类型(如开关、查询等)* @param params  参数* @param deviceId 设备ID* @return 指令字节数组*/byte[] generate(String cmdType, Map<String, Object> params, String deviceId);
}// 示例:设备类型A的指令生成策略
@Component("typeACommandStrategy")
public class TypeACommandStrategy implements CommandGenerateStrategy {@Overridepublic byte[] generate(String cmdType, Map<String, Object> params, String deviceId) {// 类型A专属协议组装逻辑,使用 Hutool 处理字节操作// 示例:ByteUtil、StrUtil 等return new byte[] { /* 类型A协议字节 */ };}
}// 示例:设备类型B的指令生成策略
@Component("typeBCommandStrategy")
public class TypeBCommandStrategy implements CommandGenerateStrategy {// 类型B专属逻辑
}

2. 工厂模式

根据设备类型动态获取策略

@Service
public class CommandGenerateFactory {// Spring 自动注入所有策略实现,key 为 Bean 名称private final Map<String, CommandGenerateStrategy> strategyMap;public CommandGenerateFactory(Map<String, CommandGenerateStrategy> strategyMap) {this.strategyMap = strategyMap;}public CommandGenerateStrategy getStrategy(String deviceType) {// 使用 Hutool 优化字符串处理String beanName = StrUtil.lowerFirst(deviceType) + "CommandStrategy";CommandGenerateStrategy strategy = strategyMap.get(beanName);if (strategy == null) {throw new UnsupportedOperationException("不支持的设备类型: " + deviceType);}return strategy;}
}

3. 命令模式

将一次下发封装为命令对象,支持高级特性

// 命令接口
public interface DeviceCommand {void execute();           // 执行下发void undo();              // 可选:撤销指令String getCommandId();    // 获取指令唯一ID,用于追踪
}public class SendDeviceCommand implements DeviceCommand {private final String commandId = IdUtil.simpleUUID(); // Hutool 生成简洁UUIDprivate final String deviceType;private final String cmdType;private final Map<String, Object> params;private final String deviceId;private final CommandGenerateFactory factory;private final CommunicationService commService; // 通信服务(如MQTT、Netty等)private byte[] generatedBytes; // 缓存生成的指令public SendDeviceCommand(String deviceType, String cmdType,Map<String, Object> params, String deviceId,CommandGenerateFactory factory, CommunicationService commService) {this.deviceType = deviceType;this.cmdType = cmdType;this.params = params;this.deviceId = deviceId;this.factory = factory;this.commService = commService;}@Overridepublic void execute() {// 1. 使用工厂 + 策略生成指令//使用工厂方法,根据设备类型获取对应的指令策略类CommandGenerateStrategy strategy = factory.getStrategy(deviceType);//调用策略的生成指令类generatedBytes = strategy.generate(cmdType, params, deviceId);// 2. 通过通信层实际下发commService.send(deviceId, generatedBytes);// 3. 记录日志(可落库)log.info("指令下发成功 commandId={} deviceId={} cmdType={}", commandId, deviceId, cmdType);}@Overridepublic void undo() {// 可选实现:发送反向指令}@Overridepublic String getCommandId() {return commandId;}
}

4. Service 层统一调用

@Service
public class DeviceCommandService {@Autowiredprivate CommandGenerateFactory factory;@Autowiredprivate CommunicationService commService;// 同步立即下发(简单场景)public void sendImmediately(String deviceType, String cmdType,Map<String, Object> params, String deviceId) {DeviceCommand command = new SendDeviceCommand(deviceType, cmdType, params, deviceId, factory, commService);command.execute();}// 异步队列下发(生产推荐)public void sendAsync(String deviceType, String cmdType,Map<String, Object> params, String deviceId) {DeviceCommand command = new SendDeviceCommand(deviceType, cmdType, params, deviceId, factory, commService);// 放入消息队列(如 RocketMQ、RabbitMQ)或线程池commandQueue.offer(command); // 或 asyncExecutor.execute(command::execute);}
}
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~
微信公众号二维码

相关新闻

  • Android 命令行打包 APK 完全指南|极速构建不求人
  • Keil单片机编程软件常见文件介绍
  • 安卓 手机直接去手机wifi设置页面的方法

最新新闻

  • 2026天津4家热门全屋定制源头工厂测评 - 信息热点
  • 2026年投标资质办理服务平台实测口碑排行:10家平台资质、通过率、服务全维度对比 - 互联网科技品牌测评
  • 2026天津靠谱全屋定制源头厂家推荐清单 - 信息热点
  • 重庆工业气体检测设备怎么选?六大品牌深度测评榜单 - 资讯纵览
  • 天津高端全屋定制工厂怎么选?5个核心标准 - 信息热点
  • D5渲染器怎么用云电脑?

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号