核心思路是用接口定义统一命令契约,让各类设备实现该接口并存入接口类型集合,遍历时jvm自动根据实际类型调用对应方法;接口精简声明通用操作如start()、stop()、status(),各设备类独立实现,调度代码简洁可扩展。

核心思路是:用接口定义统一命令契约,让各类设备实现该接口,再把它们存进接口类型的数组或集合中,遍历时直接调用方法——JVM 自动根据实际对象类型执行对应逻辑。
定义统一控制接口
不依赖具体设备类,而是抽象出“能被控制”的共性行为。比如所有设备都支持 start()、stop()、status():
- 接口要精简,只声明真正通用的操作,避免强加无关方法
- 方法签名需一致(参数类型、返回值、异常),否则无法统一调用
- 例如:interface DeviceController { void start(); void stop(); String status(); }
各类设备实现同一接口
每个设备类(如 AirConditioner、LightBulb、SmartLock)不再互相继承,而是各自 implements DeviceController:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 各自提供符合自身特性的 start() 实现(空调启动制冷,灯泡点亮,门锁开锁)
- 无需修改原有类结构,只需新增接口实现,低侵入
- 编译期就能保证所有设备具备可调度的命令能力
用接口类型数组/集合统一持有
声明为 DeviceController[] devices 或 List
- 数组元素静态类型是 DeviceController,编译器允许直接调用 start()
- 运行时 JVM 查看每个元素的实际类型(AirConditioner 或 LightBulb),动态绑定到对应实现
- 避免了强制转型和 ClassCastException 风险
调度时无需判断类型,直接遍历调用
控制中心代码变得简洁且可扩展:
- for (DeviceController d : devices) { d.start(); } —— 一行完成全部启动
- 新增设备类型?只需让它实现 DeviceController,加入数组即可,原调度逻辑零修改
- 若需差异化处理(如仅对空调调温),再用 instanceof 单独分支,但不是统一调度的必需步骤
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










