多态是java语言机制而非设计模式,需与工厂、策略等模式配合实现逻辑解耦;业务代码仅依赖接口(如paymenthandler),通过抽象工厂(如paymenthandlerfactory)和配置驱动实现运行时绑定与无侵入扩展。

多态本身不是设计模式,而是Java语言机制;它和工厂、策略等模式配合,才能在大型业务系统中真正实现逻辑解耦。核心思路是:让业务代码只依赖行为契约(接口),不感知具体是谁在干活。
用接口定义“能做什么”,而不是“是谁在做”
比如订单支付模块,不写new AlipayProcessor(),也不判断if (type.equals("alipay"))。而是定义一个PaymentHandler接口,声明execute(Order order)方法。所有支付渠道——微信、支付宝、银联——都实现这个接口。业务层只持有PaymentHandler引用,调用时完全不知道背后是哪个类。
把“谁来干”交给工厂,且工厂也要抽象化
避免写静态的SimpleFactory.getHandler(String type),因为新增渠道就得改这个类。应该定义PaymentHandlerFactory接口,每个渠道对应一个实现类(如WechatHandlerFactory)。Spring中可通过@Qualifier或ServiceLoader注入具体工厂,业务类通过构造器接收工厂,不碰new关键字。
运行时绑定,编译期零感知
- 业务代码调用handler.execute(order),JVM在运行时才决定调用哪个子类的实现
- 新增一种支付方式?只需新增实现类 + 对应工厂类 + 配置注册,订单服务代码一行不用动
- 禁止在业务层用instanceof或强制转型,那是解耦失败的明确信号
配合配置驱动,切断字符串硬编码
传参别用类名(如"com.xxx.AlipayHandler"),而用业务语义标识(如"alipay")。工厂内部再做映射——这样即使重构包路径,上层也完全无感。配置可来自properties、yml或数据库,甚至支持运行时热更新。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











