第9篇:实战案例:多平台电子面单服务——工厂模式如何解耦创建逻辑 第9篇实战案例多平台电子面单服务——工厂模式如何解耦创建逻辑摘要在电商WMS系统中不同平台的电子面单服务创建逻辑千差万别。本文从真实重构案例出发展示如何用工厂模式统一管理奇门、抖音、京东等平台的电子面单服务创建实现“新增平台零修改”。 系列导航上一篇六大设计原则在工厂模式中的体现返回 《工厂模式·扩充系列》目录 订阅本专栏不错过每一篇返回《Java 23种设计模式从踩坑到精通》总目录 订阅本专栏不错过每一篇本文是《Java 23 种设计模式从踩坑到精通》工厂模式长文的扩充短文第9篇帮助你碎片化掌握核心知识点。你有没有写过这样的代码if(platform.equals(qimen)){servicenewQiMenWaybillService();}elseif(platform.equals(douyin)){servicenewDouYinWaybillService();}elseif(platform.equals(jingdong)){servicenewJingDongWaybillService();}在电商WMS系统中电子面单服务需要对接多个平台奇门淘宝/天猫、抖音、京东、拼多多等。每个平台的请求格式、签名算法、解析逻辑完全不同。如果像上面这样硬编码每新增一个平台就要修改多处代码而且if-else会随着平台数量增长变得难以维护。工厂模式正是为此而生我们把“创建电子面单服务”这件事从业务代码中抽离出来交给专门的工厂类处理。调用方只需要告诉工厂“我要哪个平台的服务”工厂返回一个符合统一接口的服务对象至于具体是奇门还是抖音调用方根本不关心。实战电子面单服务工厂1. 统一服务接口publicinterfaceWaybillService{booleanfetchWaybill(WaybillContextctx);booleancancelWaybill(StringwaybillCode);StringqueryRemainingCount();}2. 各平台具体实现ComponentpublicclassQiMenWaybillServiceimplementsWaybillService{OverridepublicbooleanfetchWaybill(WaybillContextctx){// 奇门特有的XML请求、MD5签名、节点解析returntrue;}// ... 其他方法}ComponentpublicclassDouYinWaybillServiceimplementsWaybillService{OverridepublicbooleanfetchWaybill(WaybillContextctx){// 抖音特有的JSON请求、HMAC-SHA256签名、加密字段解析returntrue;}}3. 工厂类结合Spring自动注册ComponentpublicclassWaybillServiceFactory{privatefinalMapString,WaybillServiceserviceMapnewHashMap();AutowiredpublicWaybillServiceFactory(ListWaybillServiceservices){for(WaybillServiceservice:services){// 通过注解或约定获取平台标识Stringplatformservice.getClass().getAnnotation(Platform.class).value();serviceMap.put(platform,service);}}publicWaybillServicegetService(Stringplatform){WaybillServiceserviceserviceMap.get(platform);if(servicenull){thrownewIllegalArgumentException(不支持的平台platform);}returnservice;}}4. 客户端调用// 业务层只需一行代码WaybillServiceservicefactory.getService(order.getPlatform());service.fetchWaybill(ctx);新增平台时只需新建一个实现类并加上Platform注解无需修改工厂类或任何现有代码——完全符合开闭原则。为什么用工厂模式而不是策略模式对比维度工厂模式策略模式关注点对象的创建算法的执行核心问题“谁来创建我需要的对象”“如何执行不同的算法”典型场景根据参数返回不同服务实例运行时动态切换算法本例角色创建WaybillService实例WaybillService内部的不同取号策略在本例中WaybillService接口本身就是一个策略接口而WaybillServiceFactory负责创建这些策略实例。工厂模式解决了“创建谁”的问题策略模式解决了“怎么执行”的问题两者互补。你的场景该不该用工厂模式管理服务创建判断标准是 → 用工厂模式否 → 用其他方式有多种服务实现需要根据条件动态创建✅❌新增服务实现时希望不修改现有代码✅❌服务创建逻辑复杂如需要初始化配置✅❌服务实现种类极少≤2种且稳定❌直接 new 即可一句话总结多平台服务创建 → 用工厂模式 Spring自动注册实现零侵入扩展。 完整长文入口本文是工厂模式扩充系列的实战篇。如果你想一次性阅读完整内容含UML、三种工厂对比、框架源码、面试追问等请查看原长文 《Java 23 种设计模式从踩坑到精通 | 工厂模式》 系列导航上一篇六大设计原则在工厂模式中的体现返回 《工厂模式·扩充系列》目录 订阅本专栏不错过每一篇返回《Java 23种设计模式从踩坑到精通》总目录 订阅本专栏不错过每一篇实战配套本文的电子面单编排器设计在《电商多平台电子面单对接实战》系列中有完整落地代码多平台统一架构设计模板方法的组合与继承抉择