




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页嵌入式代码优化技巧来源:捡田螺的小男孩
最近工作中,我通过层层优化重复代码,最后抽出个通用模板.因此跟大家分享一下优化以及思考的过程。我会先造一个相似的例子,然后一步步带大家如何优化哈,看完一定会有帮助的。
优化前的例子
第一步优化:抽取公用方法
第二步优化:反射对比字段
第三步优化:泛型+lambda函数式
第四步优化:继承多态
第五步优化:模板方法成型
大功告成:策略模式+工厂模式+模板方法模式
1.优化前的例子
在这里,我先给大家(模拟)一个业务场景哈,并给出些简化版的代码
假设你有个对账需求:你要把文件服务器中,两个A、B不同端,上送的余额明细和转账明细,(下载)下来,对比每个字段是否一致.
明细和余额的对比类似,代码整体流程:
读取A、B端文件到内存的两个list
两个list通过某个唯一key转化为map
两个map字段逐个对比
我们先看明细对比哈,可以写出类似酱紫的代码:
//对比明细private
void
checkDet(ai)l(String
detailPathOfA,String
detailPathOfB
)throws
IOException{
//读取A端的文件
List
基于SpringBoot+MyBatisPlus+Vue
//读取B端明细的文件
List
resultList
=
compareObjects(dtoA,
dtoB);
for
(String
te(mpS)tr
:
resultList)
{
log.warn("{}
is
different,key:{}",
tempStr,
dtoA.getKey());
}
}
}
}}
6.模板方法
大家回头细看,可以发现不管是明细还是余额对比,两个方法很像,都是一个骨架流程来的:
读取A、B端文件到内存的两个list
两个list通过某个唯一key转化为map
两个map字段逐个对比
大家先回想一下模板方法模式:
定义了一个(算法)的骨架,将一些步骤延迟到子类中实现。这有助于避免在不同类中重复编写相似的代码。
顿时是不是就觉得这块代码还有优化空间~~
6.1定义对比模板的骨架
我们可以尝试这两块代码再合并,用模板方法优化它。我们先定义一个模板,然后模板内定义它们骨架的流程,如下:
6.2模板的方法逐步细化
因为readDataFromFile需要输出两个list,所以我们可以定义返回类型为Pair,代码如下:
又因为这个函数式的转化,是不同子类才能定下来的,我们就可以声明个抽象方法convertLineToDTD,让子类去实现。因此模板就变成这样啦:
同理,还有两个list转化为两个map再对比,我们可以声明为这样:
因此最终模板就是这样啦:
6.3不同对比子类
如果你是余额对比,那你声明一个CheckBalanceStrategyServ(ic)eImpl去继承抽象模板
如果你是明细对比,那你声明一个CheckDetailStrategyServiceImpl去继承抽象模板
这两个不同的子类,就像不同的策略,我们应该都能嗅到策略模式的味道啦~
7.工厂模式+模板方法+策略模式全家桶
有了明细对比、余额对比的模板,为了更方便调用,我们还可以定义一个校验策略接口,然后交给spring工厂类,这样更方便调用。其实日常开发中,这三种设计模式一般一起出现,非常实用:
我们先声明一个校验ICheckStrategy接口:
然后模板AbstractCheckTemplate实现ICheckStrategy接口:
接着,不同对比策略类CheckDetailStrategyServiceImpl和CheckDetailStrategyServiceImpl映射对应的对比校验类型:
/**
*
明细对比策略
*/@Servicepublic
class
CheckDetailStrategyServiceImpl
extends
AbstractCheckTemplate
{
@Override
protected
DetailDTO
convertLineToDTD(String
line)
{
return
DetailDTO.convert(line);
}
@Override
public
void
check(String
filePathA,
String
filePathB)
throws
IOException
{
checkTemplate(filePathA,
filePathB);
}
//对比校验类型为:明细
@Override
public
CheckEnum
getCheckEnum()
{
return
CheckEnum.DETAIL_CHECK;
}}/**
*
余额对比策略
*/@Servicepublic
class
CheckBalanceStrategyServiceImpl
extends
AbstractCheckTemplate
{
@Override
public
void
check(String
filePathA,
String
filePathB)
throws
IOException
{
checkTemplate(filePathA,
filePathB);
}
//对比校验类型为:余额
@Override
public
CheckEnum
getCheckEnum()
{
return
CheckEnum.BALANCE_CHECK;
}
@Override
protected
BalanceDTO
convertLineToDTD(String
line)
{
return
BalanceDTO.convert(line);
}}
最后一步,我们借助spring的生命周期,使用ApplicationContextAware接口,把对用的策略,初始化到map里
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 传统草药图案的医疗价值与教育意义
- 城市土地资产管理合同(2篇)
- 公共区域医疗安全监控系统解决方案
- 关于医用互联网安全的全面管理和提高效率的策略分享
- 临床科研与医学数据研究培训
- 全网通信及互动经济下分析全链条电子化-以区块链技术为视角
- 2025年中国单排架市场调查研究报告
- 2025年中国半电动三辊闸市场调查研究报告
- 2025年中国六角烤漆自钻自攻螺钉市场调查研究报告
- 2025年中国全抽出型三节钢珠滑轨市场调查研究报告
- 员工手册(国企通用版员工手册)
- 2023年高速公路监理工程师质量目标责任书
- SMC电磁阀的选型手册
- 口腔医学生的职业生涯规划书
- 新中国史智慧树知到答案章节测试2023年
- 部编版2022-2023学年六年级下册期末语文升学分班常考易错题模拟试卷(二)含解析
- 《老年人权益保障法》法制讲座稿
- GB/T 819.1-2000十字槽沉头螺钉第1部分:钢4.8级
- GB/T 32249-2015铝及铝合金模锻件、自由锻件和轧制环形锻件通用技术条件
- GB/T 12706.2-2020额定电压1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)挤包绝缘电力电缆及附件第2部分:额定电压6 kV(Um=7.2 kV)到30 kV(Um=36 kV)电缆
- GB 4351.1-2005手提式灭火器第1部分:性能和结构要求
评论
0/150
提交评论