1. 电商API网关的装饰器模式实战
在电商系统架构中,API网关作为流量入口承担着至关重要的职责。面对日均20亿+请求的实战场景,我们如何在不修改核心业务逻辑的前提下,动态添加日志记录、限流熔断等横切关注点?装饰器模式(Decorator Pattern)给出了优雅的解决方案。
1.1 核心需求解析
电商API网关需要具备以下核心能力:
- 可观测性:记录请求参数和响应时间,便于监控和排障
- 稳定性:通过限流熔断防止服务过载引发的雪崩效应
- 安全性:验证请求签名防止恶意调用
- 性能优化:压缩响应数据降低带宽消耗
传统继承方案的致命缺陷在于:
- 每增加一个新功能就需要创建大量组合子类
- 10种功能会产生2^10=1024种组合,导致"类爆炸"
- 违反开闭原则,每次变更都需要修改现有代码
1.2 装饰器模式的优势
装饰器模式通过组合替代继承,实现了:
- 动态功能叠加:运行时自由组合各种功能
- 单一职责:每个装饰器只关注一个特定功能
- 无侵入扩展:新增功能不影响现有代码
- 灵活配置:可通过配置文件动态调整功能组合
提示:在Spring Cloud Gateway等主流API网关实现中,装饰器模式被广泛应用。理解这个模式是掌握现代微服务架构的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 装饰器模式实现细节
2.1 基础架构设计
2.1.1 核心接口定义
java复制public interface HttpRequest {
Response execute(RequestData data); // 执行请求并返回响应
}
这个简洁的接口定义了所有请求处理器的契约,也是装饰器模式的基石。在电商场景中,RequestData通常包含:
- HTTP方法(GET/POST等)
- 端点路径(如/products)
- 请求参数
- 请求头(含签名信息)
2.1.2 基础实现类
java复制public class SimpleHttpRequest implements HttpRequest {
@Override
public Response execute(RequestData data) {
// 实际调用第三方API的代码
return callExternalApi(data);
}
private Response callExternalApi(RequestData data) {
// 模拟API调用
return new Response("200", "Success", "Data");
}
}
这个实现类代表最基础的请求处理逻辑,在电商系统中通常对应:
- 商品详情查询
- 订单创建
- 支付处理等核心业务
2.2 装饰器基类实现
java复制public abstract class HttpRequestDecorator implements HttpRequest {
protected final HttpRequest decoratedRequest; // 被装饰的请求对象
public HttpRequestDecorator(HttpRequest decoratedRequest) {
this.decoratedRequest = decoratedRequest;
}
@Override
public Response execute
