多态通过接口或抽象类统一行为契约,使对象自主决定执行逻辑,消除switch分支;结合策略或状态模式,将变化点收敛至具体子类,提升可维护性与可测试性。
多态能从根本上把“判断该走哪条路”这件事,从代码里拿掉——不再需要写 switch 去逐个比对状态或类型,而是让对象自己决定该做什么。
用接口或抽象类定义统一行为契约
先抽象出共性操作,比如所有订单处理方式都应支持 process();所有设备状态都应支持 enter()、run()、exit()。这个接口就是所有具体实现必须遵守的规则。
- 不暴露内部差异:调用方只认接口,完全不知道背后是“信用卡支付”还是“PayPal支付”
- 新增行为无需改老代码:加一种新支付方式?只需新增一个实现类,注册进系统即可
- 编译期可校验:如果新类没实现接口方法,编译直接报错,避免漏写逻辑
把分支逻辑下沉到具体子类中
原来写在 switch 里的几十行清扫逻辑、充电逻辑、避障逻辑,现在各自封装进 CleanState、ChargeState、AvoidObstacleState 类里。每个类只专注一件事。
- 逻辑归属清晰:电机启停归
CleanState::Enter()管,电量检测归CleanState::Run()管 - 调试定位快:出问题直接打开对应类,不用在上千行
switch里翻找 case 块 - 测试更简单:可单独对
CleanState写单元测试,不依赖整个机器人上下文
用容器管理多态实例,运行时动态调度
别再靠 switch (type) 查表跳转,改用字典(Map)、枚举映射或工厂方法,在启动时一次性建立“类型 → 对象”的关联。
- Java/Python 可用
Map<string command></string>或{'A': CommandA(), 'B': CommandB()} - C++ 可结合
std::unordered_map<int std::unique_ptr>></int>实现零虚函数开销的状态切换 - 调用时一行搞定:
handlers.get(type).execute(),彻底消灭 case 分支
配合策略模式或状态模式组织结构
单纯多态只是基础,真正降低维护成本的是把它嵌入合适的设计模式中:
- 策略模式适合“同一件事有多种做法”:支付、日志输出、算法选择
- 状态模式适合“对象行为随内部状态变化”:机器人状态机、订单生命周期、协议解析阶段
- 两者都天然规避了状态/类型判断散落在各处的问题,把变化点收敛到少数几个类里


















