多态替代if-else的核心是将判断逻辑下移至子类,通过统一接口(如PaymentProcessor)封装共性行为,结合工厂模式实现运行时动态绑定,新增类型只需扩展实现类并注册,业务代码零修改。

用多态替代 if-else,核心是把“判断逻辑”从调用方转移到具体对象内部,让不同行为由各自子类决定,而不是靠条件分支硬编码。
提取共性接口,定义统一行为契约
先识别所有 if-else 分支中处理的业务类型(比如支付方式:微信、支付宝、银行卡),它们虽实现不同,但都完成“扣款”“验签”“回调处理”等动作。把这些动作抽象成接口方法:
- 定义 PaymentProcessor 接口,含 process()、verifyCallback()、refund() 等方法
- 每个支付渠道实现该接口:WechatProcessor、AlipayProcessor、BankCardProcessor
- 接口不暴露类型字段或判断逻辑,只声明“能做什么”
用工厂或策略容器封装创建与查找逻辑
避免在业务代码里 new 具体实现类,也别再写 switch(type)。改用工厂按输入参数(如 payType 字符串)返回对应处理器:
- 工厂内部可维护 Map<String, PaymentProcessor>,初始化时注册各实现类实例
- 调用方只传 payType,工厂返回 Processor,后续调用 process() 即自动执行对应逻辑
- 新增支付方式?只需新增实现类 + 向工厂注册,原业务代码零修改
让上下文持有处理器,延迟绑定具体行为
把 processor 作为字段注入到订单、交易等业务实体中,或通过构造/方法传入:
- Order 类持有一个 PaymentProcessor,下单时 setProcessor(...),执行时直接 this.processor.process()
- 回调入口统一接收参数,解析出 payType → 获取对应 processor → 调 verifyCallback(),不再分散判断
- 测试更清晰:对某类 processor 可单独 mock,无需绕过一堆 if 分支
注意边界:不是所有 if-else 都适合多态
多态适用于“同一语义、多种实现”的场景。以下情况慎用或需调整:
- 分支逻辑差异极大、几乎没有共性方法 → 考虑命令模式或规则引擎
- 判断依据是运行时动态组合条件(如 status==1 && amount>1000 && userLevel==VIP)→ 多态难覆盖,更适合策略+责任链
- 仅有个别分支有特殊处理,其余共用默认逻辑 → 可用模板方法模式,基类提供骨架,子类选择性重写

















