多态通过接口抽象实现“不改核心逻辑、只加新组件”,新增业务只需实现契约;结合策略模式、装饰器、default方法和插件化加载,确保扩展性与解耦。

多态本身就是为“不改核心逻辑、只加新组件”而设计的,关键在于把变化点抽象成接口或父类,让新增业务只需实现契约,不碰原有调用链。
定义稳定接口,让新组件自然接入
核心逻辑只依赖接口,不依赖具体实现。比如订单服务调用 Payment 接口的 process() 方法,而不是某个支付类的名字。
- 新增微信支付?写个 WechatPay implements Payment
- 新增银联支付?写个 UnionPay implements Payment
- 原有订单代码完全不动,连编译都不需要
用工厂或配置驱动运行时选择
核心逻辑不硬编码 new 实例,而是通过工厂、Spring Bean 或配置文件决定用哪个实现。
- Spring 中用 @Qualifier("wechat") 注入指定实现
- 配置文件里写 payment.type=unionpay,启动时加载对应 Bean
- 策略模式中根据业务参数(如 channel=alipay)动态选实现类
配合装饰器或 default 方法做能力叠加
如果新功能是增强已有行为(比如加日志、鉴权),不用改原类,也不用改接口调用方:
- 用装饰器包装:new AuthDecorator(new LoggingDecorator(new AlipayService()))
- 在接口加 default 方法(如 logBefore()),所有实现类自动获得,且可被子类重写定制
- 注意:default 方法必须通过接口引用调用,才能参与多态分派
插件化加载,彻底解耦编译与运行
把新组件打包成独立 JAR,放在指定目录,系统启动时扫描并加载。
- 定义统一插件接口(如 OrderProcessor)
- 宿主程序用 ServiceLoader 或自定义类加载器识别实现类
- 每个插件实现 initialize()/execute()/shutdown() 生命周期方法
- 失败时跳过该插件,不影响主流程
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











