设计模式-原型模式-实战篇

近期,楼主老大给楼主优化代码的时候,使用了 bean 注入一个 httprequest 的方式减少了大量业务代码,同时提高了代码健壮性,在楼主苦思冥想一周后,发现这种做法是原型模式的一种应用,特此记录。

背景交代

楼主最近写了一个专门调用第三方服务的业务类,最先的设计是这样的

1
2
3
4
5
6
7
8
9
10
.properties文件 {
配置一些固定参数,如 key 什么的
}
service层 {
注入一堆业务参数
拼接 .properties 业务参数,根据某算法计算一个url参数值
拼接 .properties 业务参数、计算出来的参数、服务端口地址,得到请求 url
根据请求 url 获取返回值
解析返回值
}

可以发现,当需要 增加或者减少 url参数 后,需要修改 .properties 、service 层注入、service层两个拼接,比较麻烦。在楼主老大 code review 之后,代码设计变成了

1
2
3
4
5
6
7
8
9
10
11
12
.properties文件 {
配置一些固定参数,如 key 什么的
}
.xml {
把固定参数注入 com.feilong.net.entity.HttpRequest,使用 prototype
}
service层 {
使用HttpRequest自动拼接,根据某算法计算一个url参数值
把计算出的参数放入 HttpRequest.paramMap 自动拼接请求 url
根据请求 url 获取返回值
解析返回值
}

在优化之后,代码更加 简洁、优雅,在 增加或者减少 url参数 后,不用再做 繁杂的参数处理

优化demo

以小见大

当某个业务的需要用到一些特定参数的处理结果时,可以把这些参数封装成一个原型类,通用的参数处理规则、生成规则在原型类中进行封装

指导:飞天奔月 | venusdrogon

|