大白话说Java设计模式-50-综合实战下:技术架构全链路设计模式应用
2026/9/13 22:28:46 网站建设 项目流程

📌大厂规范:Java项目工具类 — 08_IP地址合法性校验工具类(Java企业级代码)

大白话说Java设计模式-50-综合实战下:技术架构全链路设计模式应用

📌一句话本质:技术架构全链路是设计模式的"工业化战场",6 大模式支撑微服务架构。

🏷️ 标签:综合实战 / 技术架构 / 微服务 / 设计模式协作 / 大白商城 🎯 适合:中高级后端 / 架构师


目录

  • 一、技术架构全链路图
  • 二、6 大设计模式协作
  • 三、完整代码实战
  • 四、模式协作关系
  • 五、架构演进总结
  • 六、本篇小结 + 下篇预告

一、技术架构全链路图

用户请求 ↓ ┌──────────────────────────────────────┐ │ Gateway(外观) │ │ 网关层统一对外 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 鉴权/限流/日志(责任链) │ │ AuthFilter → RateLimitFilter │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Controller(适配器) │ │ REST API 适配 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Service(外观 + 中介者) │ │ 业务逻辑 + 事件协调 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Repository(桥接) │ │ JDBC / JPA / Redis 多数据源 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 缓存(享元 + 装饰器) │ │ Redis 缓存 + 装饰增强 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 远程调用(代理) │ │ Feign / Dubbo 远程调用 │ └──────────────────────────────────────┘

二、6 大设计模式协作

2.1 模式一:外观(API Gateway)

/** * ✅ 外观:API Gateway */@RestController@RequestMapping("/api")publicclassApiGateway{@AutowiredprivateOrderServiceClientorderClient;@AutowiredprivateUserServiceClientuserClient;@AutowiredprivateGoodsServiceClientgoodsClient;/** * ✅ 统一对外接口 */@GetMapping("/order/{id}")publicOrderDTOgetOrder(@PathVariableStringid){// 1️⃣ 调订单服务Orderorder=orderClient.getById(id);// 2️⃣ 调用户服务Useruser=userClient.getById(order.getUserId());// 3️⃣ 调商品服务List<Goods>goods=goodsClient.getByIds(order.getGoodsIds());// 4️⃣ 组装 DTOreturnnewOrderDTO(order,user,goods);}}

作用:统一对外,封装多个服务。

2.2 模式二:责任链(鉴权/限流/日志)

/** * ✅ 责任链:API 拦截 */@ComponentpublicclassAuthFilterimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain){// 1️⃣ 鉴权if(!authenticate(req)){return;}chain.doFilter(req,resp);}}@ComponentpublicclassRateLimitFilterimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain){// 2️⃣ 限流if(!rateLimit(req)){return;}chain.doFilter(req,resp);}}@ComponentpublicclassLogFilterimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain){// 3️⃣ 日志log(req);chain.doFilter(req,resp);}}

作用:加新拦截只加 1 个 Filter。

2.3 模式三:适配器(REST API)

/** * ✅ 适配器:REST API 适配业务 */@RestController@RequestMapping("/api/order")publicclassOrderController{@AutowiredprivateOrderServiceorderService;@PostMappingpublicOrderResultcreate(@RequestBodyOrderRequestrequest){// 1️⃣ 适配:REST → 业务OrderContextcontext=adaptRequest(request);// 2️⃣ 业务调用OrderResultresult=orderService.createOrder(context);// 3️⃣ 适配:业务 → RESTreturnadaptResult(result);}privateOrderContextadaptRequest(OrderRequestrequest){OrderContextcontext=newOrderContext();context.setUserId(request.getUserId());// ... 适配returncontext;}}

作用:隔离 REST 和业务。

2.4 模式四:装饰器(缓存增强)

/** * ✅ 装饰器:缓存装饰 */@ServicepublicclassOrderServiceCacheDecoratorimplementsOrderService{@AutowiredprivateOrderServiceorderService;@AutowiredprivateRedisTemplate<String,Order>redisTemplate;@OverridepublicOrdergetById(Stringid){// 1️⃣ 装饰:先查缓存Ordercached=redisTemplate.opsForValue().get("order:"+id);if(cached!=null){returncached;}// 2️⃣ 真实调用Orderorder=orderService.getById(id);// 3️⃣ 装饰:写缓存redisTemplate.opsForValue().set("order:"+id,order,1,TimeUnit.HOURS);returnorder;}}

作用:给原有功能加缓存。

2.5 模式五:桥接(多数据源)

/** * ✅ 桥接:JDBC 抽象 */publicinterfaceDataSource{ConnectiongetConnection();}publicclassMysqlDataSourceimplementsDataSource{@OverridepublicConnectiongetConnection(){returnmysqlPool.getConnection();}}publicclassRedisDataSourceimplementsDataSource{@OverridepublicConnectiongetConnection(){returnredisPool.getConnection();}}/** * 桥接:抽象 + 实现分离 */publicabstractclassRepository{protectedDataSourcedataSource;// ✅ 桥接publicabstractObjectquery(Stringsql);}publicclassJdbcRepositoryextendsRepository{@OverridepublicObjectquery(Stringsql){Connectionconn=dataSource.getConnection();// ...}}

作用:抽象和实现分离,可独立扩展。

2.6 模式六:代理(远程调用)

/** * ✅ 代理:Feign 远程调用 */@FeignClient(name="order-service")publicinterfaceOrderServiceClient{@GetMapping("/order/{id}")OrdergetById(@PathVariableStringid);}/** * Spring 自动生成代理 * 实际调用变成 HTTP 请求 */@AutowireprivateOrderServiceClientorderClient;

作用:调用方不知道是本地还是远程。


三、完整代码实战

3.1 技术架构服务(综合)

/** * ✅ 技术架构服务:6 大模式协作 */@ServicepublicclassTechArchitectureService{@AutowiredprivateApiGatewayapiGateway;// 外观@AutowiredprivateOrderServiceCacheDecoratororderService;// 装饰器 + 代理@AutowiredprivateApplicationEventPublishereventPublisher;// 中介者/** * ✅ 完整技术架构 */publicTechResultprocess(TechRequestrequest){// 1️⃣ 外观:API 网关// 2️⃣ 责任链:鉴权/限流/日志// 3️⃣ 适配器:REST → 业务// 4️⃣ 装饰器:缓存增强// 5️⃣ 桥接:多数据源// 6️⃣ 代理:远程调用returntechResult;}}

3.2 Spring Cloud 集成

/** * ✅ Spring Cloud 全家桶 * - Gateway(外观) * - OpenFeign(代理) * - Sentinel(责任链) * - Sleuth(装饰器) * - Nacos(中介者) */@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublicclassMallApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MallApplication.class,args);}}

四、模式协作关系

技术架构全链路用了哪些模式? │ ├── 1. 外观(Facade) │ └── API Gateway 统一对外 │ ├── 2. 责任链(Chain of Responsibility) │ └── 鉴权/限流/日志 Filter │ ├── 3. 适配器(Adapter) │ └── REST ↔ 业务 │ ├── 4. 装饰器(Decorator) │ └── 缓存增强 │ ├── 5. 桥接(Bridge) │ └── JDBC 抽象 ↔ 实现 │ └── 6. 代理(Proxy) └── Feign 远程调用

4.1 模式协作图

┌──────────────────────────────────────┐ │ Gateway(外观) │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Filter Chain(责任链) │ │ Auth → RateLimit → Log │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Controller(适配器) │ │ REST ↔ 业务 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Service(外观 + 装饰器) │ │ 业务 + 缓存 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ Repository(桥接) │ │ JDBC / JPA / Redis │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 远程调用(代理) │ │ Feign / Dubbo │ └──────────────────────────────────────┘

五、架构演进总结

5.1 单体到微服务

演进路径: ├── 单体(1 个应用) │ └── 用:单例、工厂、策略 │ ├── SOA(服务化) │ └── 加:外观、适配器 │ ├── 微服务(Spring Cloud) │ └── 加:代理、责任链、桥接 │ └── 云原生(K8s + Service Mesh) └── 加:装饰器、代理、中介者

5.2 23 种模式全景

模式用途大白商城应用
单例节省内存Spring Bean
工厂方法创建对象模板选择
抽象工厂家族创建数据源族
建造者复杂对象Order 构建
原型克隆对象深拷贝
代理远程调用Feign
适配器接口转换REST ↔ 业务
装饰器功能增强缓存/日志
外观统一接口API Gateway
组合树形结构分类树
桥接抽象分离JDBC
享元共享对象标签/模板
策略算法切换支付/优惠
模板方法流程固定下单
观察者事件通知6 个 Listener
状态状态机订单 6 态
命令操作封装撤销/重做
中介者多对象协调事件总线
迭代器统一遍历分页/树
备忘录状态保存购物车
访问者操作分离营销规则
解释器自定义语言规则表达式
责任链多步处理风控

六、本篇小结 + 下篇预告

6.1 本篇小结

  1. 技术架构全链路 = 6 大模式协作
  2. 微服务架构是设计模式的工业化
  3. Spring Cloud 全家桶是模式应用

6.2 实战心法

  • 外观 + 适配器:统一对外
  • 责任链 + 装饰器:横切关注点
  • 代理 + 桥接:远程/多数据源

6.3 下篇预告

第 51 篇【收官之作】:大白话说Java设计模式 - 10 大反模式与避坑指南

最后一篇是收官之作,总结整个系列:

  1. 10 大反模式(最常见的错误用法)
  2. 50 + 文章的总结脑图
  3. 持续学习路径(书单/项目/社区)
  4. 大白的最后寄语

觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询