重学 Java 设计模式:实战适配器模式「从多个MQ消息体中,抽取指定字段值场景」 作者:小傅哥
博客: https://bugstack.cn (opens new window) 沉淀、分享、成长,让自己和他人都能有所收获!😄 # 一、前言 擦屁屁纸80%的面积都是保护手的! 工作到3年左右很大一部分程序员都想提升自己的技术栈,开始尝试去阅读一些源码,例如 Spring 、 Mybaits 、 Dubbo 等,但读着读着发现越来越难懂,一会从这过来一会跑到那去。甚至怀疑自己技术太差,慢慢也就不愿意再触碰这部分知识。 而这主要的原因是一个框架随着时间的发展,它的复杂程度是越来越高的,从最开始只有一个非常核心的点到最后开枝散叶。这就像你自己开发的业务代码或者某个组件一样,最开始的那部分核心代码也许只能占到20%,而其他大部分代码都是为了保证核心流程能正常运行的。所以这也是你读源码费劲的一部分原因。 框架中用到了设计模式吗? 框架中不仅用到设计模式还用了很多,而且有些时候根本不是一个模式的单独使用,而是多种设计模式的综合运用。与大部分小伙伴平时开发的CRUD可就不一样了,如果都是if语句从上到下,也就算得不上什么框架了。就像你到Spring的源码中搜关键字 Adapter ,就会出现很多实现类,例如 UserCredentialsDataSourceAdapter 。而这种设计模式就是我们本文要介绍的适配器模式。 适配器在生活里随处可见 如果提到在日常生活中就很多适配器的存在你会想到什么?在没有看后文之前可以先思考下。 # 二、开发环境 JDK 1.8 Idea + Maven 涉及工程三个,可以通过关注 公众号 : bugstack虫洞栈 (opens new window) ,回复 源码下载 获取(打开获取的链接,找到序号18) 工程 描述 itstack-demo-design-6-00 场景模拟工程;模拟多个MQ消息体 itstack-demo-design-6-01 使用一坨代码实现业务需求 itstack-demo-design-6-02 通过设计模式优化改造代码,产生对比性从而学习 # 三、适配器模式介绍
图片来自: https://refactoringguru.cn/design-patterns/adapter (opens new window) 适配器模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一。使得用户方便使用,就像我们提到的万能充、数据线、MAC笔记本的转换头、出国旅游买个插座等等,他们都是为了适配各种不同的 口 ,做的兼容。。
除了我们生活中出现的各种适配的场景,那么在业务开发中呢? 在业务开发中我们会经常的需要做不同接口的兼容,尤其是中台服务,中台需要把各个业务线的各种类型服务做统一包装,再对外提供接口进行使用。而这在我们平常的开发中也是非常常见的。 # 四、案例场景模拟
随着公司的业务的不断发展,当基础的系统逐步成型以后。业务运营就需要开始做用户的拉新和促活,从而保障 DAU 的增速以及最终 ROI 转换。 而这时候就会需要做一些营销系统,大部分常见的都是裂变、拉客,例如:你邀请一个用户开户、或者邀请一个用户下单,那么平台就会给你返利,多邀多得。同时随着拉新的量越来越多开始设置每月下单都会给首单奖励,等等,各种营销场景。 那么这个时候做这样一个系统就会接收各种各样的MQ消息或者接口,如果一个个的去开发,就会耗费很大的成本,同时对于后期的拓展也有一定的难度。此时就会希望有一个系统可以配置一下就把外部的MQ接入进行,这些MQ就像上面提到的可能是一些注册开户消息、商品下单消息等等。 而适配器的思想方式也恰恰可以运用到这里,并且我想强调一下,适配器不只是可以适配接口往往还可以适配一些属性信息。 # 1. 场景模拟工程
itstack-demo-design-6-00
└── src
└── main
└── java
└── org.itstack.demo.design
├── mq
│ ├── create_account.java
│ ├── OrderMq.java
│ └── POPOrderDelivered.java
└── service
├── OrderServicejava
└── POPOrderService.java
1 2 3 4 5 6 7 8 9 10 11 12