当前位置:网站首页>如何用好建造者模式
如何用好建造者模式
2022-08-04 20:22:00 【51CTO】
介绍
前段时间写了个项目,一个类的属性那叫一个多啊。刚开始直接写一堆set代码,后来set代码实在是太多了,真心看不下去了,用建造者模式重构了一下,嗯,看起来舒服多了。基本上很多框架中都用到了建造者模式,每个Java程序员也肯定用过建造者模式,只不过你没有意识到这就是建造者模式。
就像你用Collections.sort(List,Comparator)和Arrays.sort(Object[],Comparator)的时候是否意识这就是策略模式的典型实现,通过传入不同的比较器来达到不同的效果。
改造过程
先来演示一下我改造的过程,用了Lombok插件,不会的可以百度一下。
原来的实现
测试类
后来的实现
测试类
全程链式调用,清晰知道每个字段的含义,而且还节省行数,不能太爽。
如何写建造者模式?
直接看最后编译生成的class文件反编译后的内容
我觉得我不用解释你都能看懂这个代码的意思,也就两部分。
1.生成建造者类,给建造者类赋值
2.用建造者类生成想要的类
恭喜你,已经看懂什么是建造者模式了。
Lombok中@Builder注解的使用
如果你的项目中可以用Lombok插件,就不用自己手写建造者类了,直接用@Builder注解即可。如果不可以,仿造上面的类写一个建造者类也是很快的。@Builder注解需要注意的地方有如下几点。
没有继承的情况
上面已经演示了
有继承的情况
1.对于父类,使用@AllArgsConstructor注解
2.对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解
在框架中的应用
基本上所有的Java框架都用到了建造者模式,因为链式赋值真的很爽。我Google了一点用了建造者模式的代码,方便大家理解
Guava Cache框架
参考博客
[1]https://mp.weixin.qq.com/s/91C9X3Zn6Es66yqTqgnPFA
[2]https://mp.weixin.qq.com/s/8Ults75_X8gyshWCatCzUw
边栏推荐
- hash和history路由的区别
- A complete cross-compilation environment records the shell scripts generated by peta
- MySQL stored procedure introduction, creation, case, delete, view "recommended collection"
- 简易数据缓存层的建立
- 刷题-洛谷-P1200 你的飞碟在这儿Your Ride Is Here
- 二叉树是否对称
- C语言小笔记+题
- 蚂蚁集团时序数据库CeresDB正式开源
- Go study notes (Part 1) Configuring the Go development environment
- 带你了解数据分布式存储原理
猜你喜欢
随机推荐
构建Buildroot根文件系统(I.MX6ULL)
QT(42)-QT线程-线程调用槽函数
Latex分章节、分段落编译:input{}与include{}的区别
Red5搭建直播平台
Desthiobiotin衍生物Desthiobiotin-PEG4-Amine/Alkyne/Azide/DBCO
PriorityQueue类的使用及底层原理
How to monitor code cyclomatic complexity by refactoring indicators
C语言——青蛙跳台阶(递归)
QT(41)-多线程-QTThread-同步QSemaphore-互斥QMutex
Chrome安装zotero connector 插件
win10 uwp 修改图片质量压缩图片
Apache服务器配置多个站点
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
zynq records
Client Side Cache 和 Server Side Cache 的区别
零知识证明——zkSNARK证明体系
5 g NR notes
The establishment of simple data cache layer
really time ntp service start command
JS new一个构造器发生了什么?从零手写一个new方法