新闻详情

新闻详情

首页 / 资讯中心 / 详情

大白话说Java设计模式-48-综合实战上:下单全链路设计模式应用

发布时间:2026/9/13 22:25:08来源:尧图网络
大白话说Java设计模式-48-综合实战上:下单全链路设计模式应用
大厂规范Java项目工具类 — 06_UUID生成工具类Java企业级代码大白话说Java设计模式-48-综合实战上下单全链路设计模式应用一句话本质下单全链路是设计模式的试金石7 大经典模式协同作战。️ 标签综合实战 / 下单全链路 / 设计模式协作 / 大白商城 适合所有 Java 工程师目录一、为什么需要综合实战二、下单全链路流程图三、7 大设计模式协作四、完整代码实战五、模式之间的协作关系六、本篇小结 下篇预告一、为什么需要综合实战从 02 篇到 47 篇我们系统讲了 23 种 GoF 设计模式。但真实业务不是单模式——下单全链路用到了7 大模式协同单例Spring 容器管理 Bean策略支付方式4 种状态订单状态机6 种责任链风控链5 步观察者订单事件6 个 Listener模板方法下单流程骨架享元商品标签5 共享这一篇我们用大白商城真实下单流程串起来画龙点睛。二、下单全链路流程图用户下单 ↓ ┌──────────────────────────────────────┐ │ Controller 层外观模式 │ │ OrderController.createOrder() │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 风控链责任链 │ │ BlackList → Frequency → Fraud │ │ → Compliance → HighRisk │ └──────────────┬───────────────────────┘ ↓ 通过 ┌──────────────────────────────────────┐ │ 订单服务模板方法 │ │ AbstractOrderProcessor.processOrder() │ │ ├── beforeProcess │ │ ├── createOrder创建订单 │ │ ├── decreaseStock减库存 │ │ ├── pay支付策略模式 │ │ ├── notify通知观察者模式 │ │ └── afterProcess │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 支付策略模式 │ │ PaymentContext.pay(channel) │ │ ├── AlipayStrategy │ │ ├── WechatStrategy │ │ ├── UnionPayStrategy │ │ └── DigitalRmbStrategy │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 订单状态机状态模式 │ │ PAID → SHIPPED → COMPLETED │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 事件通知观察者模式 │ │ OrderPaidEvent │ │ ├── StockListener减库存 │ │ ├── PointsListener加积分 │ │ ├── LogisticsListener准备发货 │ │ ├── PushListener推送 │ │ ├── StatisticsListener统计 │ │ └── AuditListener审计 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 商品标签享元模式 │ │ GoodsTag热销/新品/包邮共享 │ └──────────────────────────────────────┘三、7 大设计模式协作3.1 模式一单例Spring Bean/** * ✅ 单例Spring Bean 默认单例 * p * OrderService / OrderController / 各 Listener 都是单例 */ServicepublicclassOrderService{// 整个 JVM 只有一个 OrderService 实例}作用节省内存Spring 自动管理。3.2 模式二策略支付方式/** * ✅ 策略支付方式 */publicinterfacePaymentStrategy{PaymentResultpay(PaymentRequestrequest);StringgetChannel();}ComponentpublicclassAlipayStrategyimplementsPaymentStrategy{...}ComponentpublicclassWechatStrategyimplementsPaymentStrategy{...}作用加新支付方式只加 1 个 Strategy。3.3 模式三状态订单状态机/** * ✅ 状态订单 6 状态 */publicinterfaceOrderState{voidpay(Orderorder);voidship(Orderorder);voidcancel(Orderorder);voidcomplete(Orderorder);}ComponentpublicclassPendingPayStateimplementsOrderState{...}ComponentpublicclassPaidStateimplementsOrderState{...}作用加新状态只加 1 个 State 类。3.4 模式四责任链风控/** * ✅ 责任链风控 5 步 */publicinterfaceRiskHandler{voidhandle(RiskContextcontext,RiskChainchain);}ComponentpublicclassBlackListHandlerimplementsRiskHandler{...}ComponentpublicclassFrequencyHandlerimplementsRiskHandler{...}作用加新风控规则只加 1 个 Handler。3.5 模式五观察者订单事件/** * ✅ 观察者订单事件 */publicclassOrderPaidEventextendsApplicationEvent{...}ComponentpublicclassStockListener{EventListenerpublicvoidonOrderPaid(OrderPaidEventevent){...}}ComponentpublicclassPointsListener{EventListenerpublicvoidonOrderPaid(OrderPaidEventevent){...}}作用加新事件订阅只加 1 个 Listener。3.6 模式六模板方法下单骨架/** * ✅ 模板方法下单流程 */publicabstractclassAbstractOrderProcessor{publicfinalOrderResultprocessOrder(OrderContextcontext){// 1️⃣ 钩子beforeProcess(context);// 2️⃣ 抽象方法OrderordercreateOrder(context);// 3️⃣ 抽象方法decreaseStock(order,context);// 4️⃣ 抽象方法pay(order,context);// 5️⃣ 抽象方法notify(order,context);// 6️⃣ 钩子afterProcess(context,result);returnresult;}protectedabstractOrdercreateOrder(OrderContextcontext);protectedabstractvoiddecreaseStock(Orderorder,OrderContextcontext);protectedabstractvoidpay(Orderorder,OrderContextcontext);protectedabstractvoidnotify(Orderorder,OrderContextcontext);}作用通用流程只写 1 次子类填差异。3.7 模式七享元商品标签/** * ✅ 享元商品标签 */ComponentpublicclassTagFactory{privatefinalConcurrentHashMapString,TagtagPoolnewConcurrentHashMap();publicTaggetTag(Stringname){returntagPool.computeIfAbsent(name,this::createTag);}}作用100 万件商品的 500 万个标签从 5GB 降到 50MB。四、完整代码实战4.1 Controller外观/** * ✅ 外观统一对外接口 */RestControllerRequestMapping(/api/order)publicclassOrderController{AutowiredprivateOrderServiceorderService;AutowiredprivateRiskControlServiceriskService;PostMapping(/create)publicOrderResultcreateOrder(RequestBodyOrderRequestrequest){// 1️⃣ 风控链RiskResultriskResultriskService.check(buildRiskContext(request));if(!riskResult.isApproved()){returnOrderResult.failed(riskResult.getReason());}// 2️⃣ 下单模板方法returnorderService.createOrder(request);}}4.2 Service模板方法/** * ✅ Service模板方法调用方 */ServicepublicclassOrderService{AutowiredprivateListAbstractOrderProcessorprocessors;publicOrderResultcreateOrder(OrderRequestrequest){// 1️⃣ 选模板按订单类型AbstractOrderProcessorprocessorselectProcessor(request);// 2️⃣ 调模板方法returnprocessor.processOrder(buildContext(request));}}4.3 风控链责任链/** * ✅ 风控责任链 */ServicepublicclassRiskControlService{AutowiredprivateBlackListHandlerblackListHandler;AutowiredprivateFrequencyHandlerfrequencyHandler;publicRiskResultcheck(RiskContextcontext){ListRiskHandlerhandlersList.of(blackListHandler,frequencyHandler);RiskChainchainnewRiskChain(handlers);returnchain.process(context);}}4.4 支付策略/** * ✅ 支付策略 */ServicepublicclassPaymentContext{privatefinalMapString,PaymentStrategystrategyMapnewHashMap();AutowiredpublicPaymentContext(ListPaymentStrategystrategies){strategies.forEach(s-strategyMap.put(s.getChannel(),s));}publicPaymentResultpay(Stringchannel,PaymentRequestrequest){returnstrategyMap.get(channel).pay(request);}}4.5 状态机状态/** * ✅ 状态订单状态机 */ComponentpublicclassOrderStateMachine{AutowiredprivateApplicationEventPublishereventPublisher;publicvoidchangeState(Orderorder,OrderEventevent){// 1️⃣ 改状态OrderStateoldStateorder.getState();event.applyTo(order);OrderStatenewStateorder.getState();// 2️⃣ 发事件eventPublisher.publishEvent(newOrderStateChangedEvent(this,order.getOrderId(),oldState.getStateName(),newState.getStateName()));}}4.6 事件订阅观察者/** * ✅ 观察者事件订阅 */ComponentpublicclassStockListener{EventListenerpublicvoidonOrderPaid(OrderPaidEventevent){log.info(【库存】扣减, orderId{},event.getOrderId());// 减库存}}ComponentpublicclassPointsListener{EventListenerpublicvoidonOrderPaid(OrderPaidEventevent){log.info(【积分】增加, orderId{},event.getOrderId());// 加积分}}五、模式之间的协作关系下单全链路用了哪些模式 │ ├── 1. 外观Facade │ └── OrderController 统一对外 │ ├── 2. 责任链Chain of Responsibility │ └── RiskControlService 风控 5 步 │ ├── 3. 模板方法Template Method │ └── AbstractOrderProcessor 下单骨架 │ ├── 4. 策略Strategy │ └── PaymentContext 支付 4 种 │ ├── 5. 状态State │ └── OrderStateMachine 订单 6 态 │ ├── 6. 观察者Observer │ └── ApplicationEvent 6 个 Listener │ ├── 7. 单例Singleton │ └── Spring Bean 默认单例 │ ├── 8. 享元Flyweight │ └── TagFactory 标签共享 │ └── 9. 工厂方法Factory Method └── SelectProcessor 选模板5.1 模式协作图┌──────────────────────────────────────┐ │ Controller外观 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 风控责任链 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 模板方法骨架 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 支付策略 状态状态机 │ └──────────────┬───────────────────────┘ ↓ ┌──────────────────────────────────────┐ │ 事件观察者 享元标签 │ └──────────────────────────────────────┘5.2 模式的核心价值模式价值在下单全链路外观统一对外Controller责任链多步可中断风控模板方法流程固定下单骨架策略算法可切换支付状态行为随状态状态机观察者一对多通知事件享元共享对象标签单例节省内存Bean六、本篇小结 下篇预告6.1 本篇小结下单全链路 7 大模式协作每个模式有明确分工模式之间可叠加使用6.2 实战心法外观 责任链先做风控模板方法 工厂固定流程策略 状态业务核心观察者 享元性能与解耦6.3 下篇预告第 49 篇【综合实战 - 中篇】大白商城营销全链路设计模式应用下一篇我们看营销全链路——优惠计算链 / 优惠券模板 / 营销规则引擎用到了另外 5 大模式策略 责任链 访问者 享元 解释器营销规则的动态化优惠叠加计算并附完整的代码 流程图 模式协作图。觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CAN自定义协议设计实战:ID分配、数据排布与校验同步 2026/9/13 23:19:14

CAN自定义协议设计实战:ID分配、数据排布与校验同步

1. 为什么“CAN自定义协议”是嵌入式系统里绕不开的硬功夫你手头正调试一辆电动滑板车的电机控制器,CAN总线上跑着十几种报文:电池SOC、电机转速、刹车信号、档位状态、故障码……但当你想把新开发的BMS模块接入同一总线时,发现老主控根本不识…

阅读更多 →
ESP32-S3端到端具身智能机器人实战 2026/9/13 23:19:14

ESP32-S3端到端具身智能机器人实战

1. 项目概述:这不是玩具,是具身智能的最小可行单元 “给小智 AI 装上手臂和眼睛”——这句话乍听像科幻设定,但拆开来看,它精准锚定了当前具身智能落地最务实的路径: 以 ESP32-S3 为神经中枢,语音为交互入…

阅读更多 →
电机控制秋招硬通货:软硬协同能力三维矩阵实战指南 2026/9/13 23:19:14

电机控制秋招硬通货:软硬协同能力三维矩阵实战指南

1. 为什么电机控制是秋招“硬通货”?——从招聘JD反推能力图谱 去年秋招季,我帮三个不同背景的应届生做过模拟面试:一个本科学自动化的,一个硕士搞电力电子的,还有一个跨考进来的计算机系同学。结果发现,只…

阅读更多 →
2026 年 AI 面试工具「转行求职」选型指南:——6 款产品在跨行业面试中的实测 2026/9/13 23:19:14

2026 年 AI 面试工具「转行求职」选型指南:——6 款产品在跨行业面试中的实测

文章目录一、转行面试的特殊挑战二、测评方法论:转行面试 5 个核心维度三、6 款工具逐维度实测3.1 OfferGoose 鹅来面(原多面鹅)——可迁移能力提取追问深度,转行面试首选✅ 优势 / ⚠️ 局限3.2 Offerin AI——岗位匹配方向探索好…

阅读更多 →
ESP32-S3端到端具身智能:语音+视觉+机械臂闭环实践 2026/9/13 23:19:14

ESP32-S3端到端具身智能:语音+视觉+机械臂闭环实践

1. 这不是玩具,是具身智能的最小可行单元“给小智 AI 装上手臂和眼睛”——这句话听起来像科幻片里的旁白,但当你把 ESP32-S3、一个六自由度总线舵机机械臂、一块 OV2640 摄像头模组和一段 Python 控制脚本真正焊在一起、烧进去、跑起来的时候&#xff0…

阅读更多 →
UnoCSS CLI 完全指南:用 @unocss/cli 在传统后端与命令行工作流中生成原子化 CSS 2026/9/13 23:16:14

UnoCSS CLI 完全指南:用 @unocss/cli 在传统后端与命令行工作流中生成原子化 CSS

UnoCSS CLI 完全指南:用 unocss/cli 在传统后端与命令行工作流中生成原子化 CSS 【免费下载链接】unocss The instant on-demand atomic CSS engine. 项目地址: https://gitcode.com/GitHub_Trending/un/unocss unocss/cli 是 UnoCSS 的命令行入口&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞