专栏名称: 互联网后端架构
主要介绍Java后端架构。其中也会掺杂一些前端、GO、Python、Linux,目标:全栈工程师!---好像很牛叉的样子 ^-^
目录
相关文章推荐
Java架构师技术  ·  SpringBoot+Flowable:一个 ... ·  11 小时前  
Java架构师技术  ·  SpringBoot+Flowable:一个 ... ·  11 小时前  
架构师之路  ·  别TM浪费算力了,这样才能最大限度发挥dee ... ·  4 天前  
高可用架构  ·  漫谈DeepSeek及其背后的核心技术 ·  2 天前  
美团技术团队  ·  CVPR 2025 NTIRE赛事 | ... ·  3 天前  
51好读  ›  专栏  ›  互联网后端架构

重构实践之桥接模式

互联网后端架构  · 公众号  · 架构  · 2017-09-16 07:47

正文

近日,在开发的过程中发现了一个很大的类,有1000+行代码,大部分情况下,一个1000+行代码的类一定是做了一些本不应该是它负责的事,这是一个处理订单的类,方法大多数是对各种订单消息的处理:

各个Listener(消息监听器)实现接口MessageListener的onMessage方法来接受消息,然后调用服务处理消息,以上结构有三个缺点:

第一、接受消息的代码(如日志、异常处理、监控、遍历)是重复的

第二、Listener(消息监听器)与服务直接耦合

第三、处理消息的服务不够明确,直接导致一个臃肿类的出现

重构开始,首先抽象消息接受模版,解决重复代码问题,然后定义”桥”来连接Listener(消息监听器)和服务:

MessageResolver(消息处理器)作为”桥”,将抽象与实现解耦,Resolver对于Listener是透明的,Resolver的变化不会影响到Listener,具有良好的扩展性,实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
abstract class AbstractListener implements MessageListener {
//实现接口的方法接受消息
void onMessage(List msgList) {
log(); //日志
ump(); //监控
try {
//遍历
foreach {
getMessageResolver.resolve(message);
}
} catch (...) {
}
}
abstract MessageResolver getMessageResolver(message);
}
interface MessageResolver {
void resolve(message);
}
class OrderSubmitMessageListener extends AbstractListener {
MessageResolver getMessageResolver() {
return OrderMessageResolver;






请到「今天看啥」查看全文