多态通过统一接口(如DeviceReceiver)屏蔽硬件协议差异,使网关仅依赖抽象类型调用receive()方法,运行时由具体实现类(ZigbeeReceiver等)处理协议解析;配合配置中心动态加载,新增协议只需实现接口并配置映射;数据归一化阶段再用DataNormalizer多态将原始数据转为标准JSON。

Java 中多态本身不直接处理硬件协议,但它为物联网系统提供了一套干净、可扩展的抽象机制——让不同协议的设备接入逻辑,对外呈现为同一套接口调用,内部各自实现差异。
用接口定义统一接入契约
不写 if-else 判断设备类型,而是定义一个标准接口,比如 DeviceReceiver:
- 声明通用方法:void receive(byte[] raw); DeviceMetadata getMetadata();
- 所有协议处理器都实现它:ZigbeeReceiver、ModbusTCPReceiver、LoRaWANReceiver
- 网关核心只依赖 DeviceReceiver 类型,完全不知道具体是哪种协议
运行时自动分发,无需手动识别
当一条原始数据到达时,系统根据设备注册信息(如模块ID或配置中心下发的类型标识)找到对应的具体 Receiver 实例:
- new ZigbeeReceiver().receive(packet) → 自动解析ZCL帧、校验群组地址
- new ModbusTCPReceiver().receive(buffer) → 按寄存器地址解包、处理字节序
- 调用方代码始终是 receiver.receive(data),行为由实际对象类型决定
配合配置驱动,支持动态增删协议
海曼科技的专利方案就体现了这种思路:从配置中心读取“协议类型”字段,自动实例化对应类并存入响应式缓存容器。新增一种协议只需:
立即学习“Java免费学习笔记(深入)”;
- 写一个新类实现 DeviceReceiver 接口
- 在配置中添加一行映射关系(如 protocol: "opcua" → class: "OpcUaReceiver"
- 重启该模块或热加载,其他代码完全不动
延伸到数据归一化环节
接收之后,原始数据格式仍千差万别。这时再用多态构建 DataNormalizer:
- 统一输入:原始字节流或消息对象
- 每个设备型号/协议配一个 Normalizer 实现,负责提取时间戳、物理量、质量标识
- 输出强制为标准 JSON 结构,供后续存储、告警、联动统一消费


















