多态在支付系统中核心作用是用统一接口屏蔽不同渠道实现差异,使业务代码不感知具体支付方式;通过PaymentProcessor接口定义pay、queryOrder等共性操作,各渠道实现类封装API调用、签名验签等细节,运行时按渠道类型动态选择处理器,新增渠道只需增加实现类和配置,符合开闭原则。

多态在支付系统中核心作用是:用统一接口屏蔽不同渠道(微信、支付宝、银联、PayPal等)的实现差异,让业务代码不感知具体支付方式,便于扩展和维护。
定义统一支付行为抽象
用接口或抽象类声明支付共性操作,比如:
- pay():发起支付请求
- queryOrder():查询订单状态
- refund():执行退款
- notifyHandler():处理异步回调(各渠道验签、解析格式不同)
例如定义 PaymentProcessor 接口,不包含任何具体实现,只约定“能做什么”。
各渠道实现自己的具体逻辑
每个支付渠道写一个实现类,如 WechatPaymentProcessor、AlipayPaymentProcessor,分别覆盖上述方法:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 微信调用微信统一下单 API,用 JSAPI 签名生成 prepay_id;
- 支付宝调用 alipay.trade.pay,需用 RSA2 签名 + 支付宝公钥验签;
- 银联走全渠道网关,报文是 XML 格式,需加签并设置证书路径。
这些细节完全封装在各自实现类内部,上层无需关心。
运行时动态选择具体处理器
通过策略模式 + 工厂或 Spring 的 @Qualifier 注入,根据渠道类型(如 "wechat"、"alipay")获取对应 Bean:
PaymentProcessor processor = paymentProcessorFactory.getProcessor("alipay");
processor.pay(orderRequest); // 实际调用 AlipayPaymentProcessor.pay()
新增渠道只需新增实现类 + 配置,不改原有代码,符合开闭原则。
结合模板方法统一非差异化流程
若多个渠道都有“记录日志 → 调用渠道接口 → 持久化响应 → 发送消息”这类固定步骤,可用抽象类定义模板方法:
- doPay() 是模板方法(final),编排流程;
- buildRequest()、parseResponse() 等为 abstract 方法,由子类实现;
- 公共逻辑(如幂等校验、耗时打点)只写一次。
这样既保留多态灵活性,又避免重复模板代码。

















