java利用多态实现命令模式,核心是通过统一command接口声明execute()等方法,由不同concretecommand子类重写提供具体逻辑,jvm运行时根据实际对象类型动态绑定调用,实现解耦、可扩展与撤销支持。

Java 利用多态实现命令模式,核心在于用统一的接口(Command)声明行为,再通过不同子类(ConcreteCommand)提供各自的具体执行逻辑——运行时由 JVM 根据实际对象类型自动调用对应方法,无需 if-else 或 switch 判断。这种动态绑定正是多态的价值所在。
命令接口定义统一契约
定义一个接口或抽象类作为命令的“统一入口”,只暴露标准方法(如 execute() 和可选的 undo())。所有具体命令都实现它,但内部逻辑完全独立:
- 接口不关心谁执行、怎么执行,只约定“能被调用”
- 调用者(Invoker)只持有
Command类型引用,编译期就确定了安全调用范围 - 新增命令类时,只要实现该接口,调用者代码完全不用改
具体命令类体现多态行为
每个具体命令类(如 LightOnCommand、FanOffCommand、SaveDocumentCommand)都继承自同一命令接口,但 execute() 方法体内调用各自绑定的接收者(Receiver)和操作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
LightOnCommand.execute()调用light.turnOn() -
SaveDocumentCommand.execute()调用editor.save() - 运行时传入哪个实例,就执行哪套逻辑——这就是多态的分发机制
调用者借助多态实现解耦
调用者(如 RemoteControl 或 MenuButton)只依赖 Command 接口,不感知任何具体命令类型:
- 它的
setCommand(Command cmd)方法参数是接口类型,可接收任意实现类 - 它的
pressButton()方法中写的是cmd.execute(),JVM 在运行时查虚方法表,精准跳转到实际对象的实现 - 客户端可以随时替换命令对象(比如把“开灯”换成“播放音乐”),调用者逻辑零修改
撤销与组合也靠多态支撑
支持 undo() 的命令接口同样利用多态:每个具体命令决定自己如何“反向操作”。组合命令(MacroCommand)更典型——它本身也实现 Command 接口,execute() 中遍历子命令并调用它们的 execute()。由于每个子命令都是 Command 类型,循环体内一句 cmd.execute() 就能触发多种不同行为,无需类型判断。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










