📌大厂规范: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 本篇小结
- 技术架构全链路 = 6 大模式协作
- 微服务架构是设计模式的工业化
- Spring Cloud 全家桶是模式应用
6.2 实战心法
- 外观 + 适配器:统一对外
- 责任链 + 装饰器:横切关注点
- 代理 + 桥接:远程/多数据源
6.3 下篇预告
第 51 篇【收官之作】:大白话说Java设计模式 - 10 大反模式与避坑指南
最后一篇是收官之作,总结整个系列:
- 10 大反模式(最常见的错误用法)
- 50 + 文章的总结脑图
- 持续学习路径(书单/项目/社区)
- 大白的最后寄语
觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯