多态在业务中落地的核心是分离变与不变:接口定义稳定契约,子类封装变化逻辑,业务代码面向接口编程。如支付扩展只需新增实现类和工厂映射;规则引擎通过Rule接口解耦条件与动作;文件加载器用模板方法统一流程、子类实现差异;渲染逻辑下沉至Renderer接口,数据对象保持纯净。

多态在业务中落地,核心不是写几个子类,而是把“变与不变”真正分开:接口定义稳定契约,子类封装变化逻辑,业务代码只面向接口编程,运行时自动绑定具体实现。
支付方式扩展:用接口统一行为,新增渠道零改动
电商订单模块不需要知道微信还是支付宝——它只调用 Payment.pay(amount)。所有支付类实现同一接口,工厂根据配置返回对应实例。上线新支付渠道时,只需新增一个实现类 + 在工厂里加一条映射规则,订单服务代码完全不动。避免了满屏 if-else 判断 type,也规避了修改已有类带来的回归风险。
规则引擎即插即用:条件与动作解耦到子类
风控或营销系统常需动态增删业务规则。定义统一 Rule 接口,每个规则(如“新用户首单免运费”“VIP满减”)各自实现 condition() 和 action()。引擎按顺序遍历规则列表,只关心是否满足 condition,满足就执行 action。加一条新规则?写个新类、注册进规则库即可,主流程不感知、不修改、不重启。
文件加载器重构:模板方法 + 多态拆分差异点
系统要支持 JSON、XML、CSV 等多种格式导入,每种打开、解析、关闭逻辑不同,但整体流程固定。抽象出 Loader 模板类,定义 open()、parse()、close() 三个抽象方法,让子类专注实现自己那块;主流程由模板方法 load() 控制。工厂按后缀名返回对应子类,业务层调用 load(path) 即可,不用管背后是哪个解析器在干活。
渲染逻辑下沉:数据对象不再包揽 UI 细节
报表、后台管理页中,同一份数据(如订单、用户、商品)在不同页面展示形式各异。与其在 Row 类里堆砌 if-else 渲染逻辑,不如定义 Renderer 接口,为每种视图场景提供专属实现(ListRenderer、DetailRenderer、ExportRenderer)。数据对象只负责持有原始字段,渲染交给对应的 Renderer 实例。换皮肤、加新页面?新增一个渲染器就行,模型层保持干净。

















