实体类里的内部类怎么单独赋值_java你还在用各种setter赋值初始对象吗?用设计模式化简为易...

我在公司也看到了很多的系统了。当我看到一个结构清晰、代码清晰的代码时会称赞那些能写这样代码的人真是太棒了。看到乱七八糟的代码注释时也会抱怨吐槽“这是什么代码啊”?

看看别人的代码,总会有不同的发现和体验。

最近在看别人的项目时,我发现会有这样一种写法。

a497a6eb94481e57ee6c68e31106b671.png

查看代码,很容易看到它在做什么,即创建MessageTask这个对象。

当我们第一次学习如何创建这个象的时候?你会如何写?一般有两种方法:

将属性配在构造函数上,然后直接调构造器,传入参数调用多个set方法
b25b519baaeaf74cb7a33de23e7a6c11.png

在日常使用中,用set方法应该被多次使用(应该是这样)。

从代码层面看,采用构造函数传递参数的代码是最短的,但实际上,我们很难通过构造函数每次传递参数的方式来完成对象的创建(更多的情况是每个对象的属性不一致)。

构造函数代码看起来很短,但阅读起来不太友好(还要看看每个参数意味着什么)。

set方法不方便编写。如果一个对象有很多属性,就会有一个大串的set代码。

在文章的开头,采用builer链式调用非常舒服。我一看代码,就知道它一定是一个我不知道的设计模式。

所以我检查了一下,发现这叫做建造者模式

怎么实现建造者模式?

建造者模式更多的是写法上的不同,从代码结构层面上其实没有很大的区别,只是看起来会更清爽一些。

那怎么实现建造者模式呢?其实也非常简单:

a6445cc43bdd10017e9b8a4e59e38ca8.png

让我们来实现它。首先,创建一个静态内部类Builder,内部类Builder拥有Builder的所有属性:

abfcc194d5752a184fb66861b8ca69db.png

在domain类上创建一个私有的构造函数,参数类型为Builder,里边是将Builder的属性赋值给domain的属性。

3a3a0aaaf2207db152c0f0e24146df80.png

接着在Builder内部类创建domain属性的赋值方法,返回值是Builder。

8f2f7dcba7ed15a3d28a2c7e1697fed0.png
a52c90f69c40c225c6363d7e625786c9.png

然后在Builde的r内部类创建一个builde方法,返回domain的实例。

79c1373a47aaa3cc54b68de9143395ba.png
882c65b076dc86adc6522778fb62d054.png

使用方式:先创建Builder对象的实例,然后用Builder去赋值,再调用build()返回真正的实例。

0a99dd36d155b5772ffe61e2f6af4402.png

借助外部工具使用建造者模式

从使用的角度看,我觉得它很好用,代码也很好看。事实上,我们都把逻辑写到domain类中,这需要时间来写。

我的第一印象是,一定有一种方法可以通过一次点击就生成这样一个通用的东西,所以我把目标瞄准了Lombok。

当然,如果我们使用Lombok并在类中添加注释@builder,我们就可以使用builder模式的代码了,这非常方便。

b6c3b3fe545f2c81015c6d428b9b519d.png

我想了一下现在的IDEA那么强大一定可以生成Builder。

e4a80572ff3bce322f95b39b70e30cf4.png

我个人看团队的代码风格。如果原始就用各种set构造对象,则我不会修改它。如果是一个新的业务,我将使用构建器模式去完成它。

baaffdddc31be27ddc81fc036b5c3379.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值