接口定义能力契约,抽象模板类固化调用顺序;二者分层协作:接口约束“有哪些能力”,模板方法强制“按何顺序执行”,组合泛型实现解耦复用,工厂动态装配适配器保障流程合规。

接口本身不直接实现模板方法模式,但可以与模板方法模式协同使用,共同规范多系统对接标准——接口定义“能做什么”,抽象模板类定义“必须按什么顺序做”,二者分层协作,既保证契约统一,又固化流程骨架。
用接口统一对接能力契约
多个外部系统(如支付网关、短信平台、物流服务)虽实现不同,但都应提供一致的能力入口。此时定义标准接口,明确必需行为:
-
SystemAdapter:声明
connect()、sendRequest()、parseResponse()等核心方法,不包含任何流程逻辑 - 各系统适配器(
AlipayAdapter、YunPianAdapter、ShunFengAdapter)实现该接口,各自处理协议细节、签名方式、异常重试策略 - 接口不控制调用顺序,也不封装共性逻辑(如超时设置、日志埋点),只约束“有哪些能力”
用抽象模板类固化对接流程骨架
真正约束“怎么调用”的是抽象模板类,它继承接口并扩展流程控制:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 定义
final void executeFlow()模板方法:严格按preCheck() → connect() → sendRequest() → parseResponse() → postProcess()执行 - 其中
connect()、sendRequest()、parseResponse()声明为protected abstract,强制子类实现,同时满足SystemAdapter接口契约 -
preCheck()和postProcess()在抽象类中提供默认实现(如参数校验、统一日志记录),避免各系统重复编码
通过组合+泛型提升复用与类型安全
避免让每个适配器同时继承抽象模板又实现接口带来的耦合,推荐组合方式:
- 抽象模板类
AbstractSystemTemplate<t extends systemadapter></t>持有一个T实例 - 模板方法中调用
adapter.connect()等,而非直接继承;子类只需传入对应适配器实例 - 这样既复用流程骨架,又保持适配器的独立可测试性,新增系统只需提供新
SystemAdapter实现,再套用同一模板
运行时动态装配对接流程
对接系统常需按业务上下文切换(如生产走微信支付,测试走模拟网关),结合工厂或Spring容器解耦:
- 配置中心指定
payment.type=wechat,工厂返回WechatAdapter实例 - 该实例注入到
AbstractSystemTemplate子类(如WechatPaymentFlow)中 - 上层统一调用
flow.executeFlow(),无需感知具体系统,流程合规性由模板方法保障
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










