lombok中使用建造者模式的好处
Posted 技术无产者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lombok中使用建造者模式的好处相关的知识,希望对你有一定的参考价值。
1. 概念
建造者模式是设计模式的一种,讲一个复杂对象的构建和他的表示分离,是的同样的构建过程可以创建不同的表示。
这种模式又称为生成器模式,这种类型的设计模式提供一种创建对象的最佳方式。
1、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
2、主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
3、如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
4、解决的问题:
(1)方便用户创建复杂的对象(不需要知道实现过程)
(2)代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)
5、注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序,一般用来创建更为复杂的对象
2. 好处
因为我们构建java bean 的时候,其实就有三种写法。
1. 通过构造函数传参的方式来进行构建(臃肿 不能灵活地只设置某些参数)
2.写很多构造方法。而且容易吧两个属性的参数写错位置等等;(重载很多的构造器,然后可以保证数据的一致性,比较安全)
3.写一堆setter方法,缺点就是够早的过程会被分到几个调用中。构造可以出现不一致的状态。(而且代码很啰嗦)
4.采用builder模式的话,当一个类的参数很多的时候。
(使用javabean模式,调用一个无参的构造器,然后调用setter方法来设置每个必要的参数。但是javabean自身有着严重的缺点,因为构造过程被分到几个调用中,在构造javabean可能处于不一致的状态,类无法仅仅通过检验构造器参数的有效性来保证一致性。也就是set的过程中其实很多时候并不能保证一致性,因为set已经算是分开执行了)
build模式 既能保证像重叠构造器那样的安全,也能实现JavaBean模式那样的可读性。 (不用操心线程)
那么bulid模式的步骤:
(1)不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个build对象。
(2)然后让客户端在build对象上调用类似的setter方法来设置每个相关的可选参数,
(3)最后,客户端调用无参的build方法来生成不可变的对象。这个builder是它构建的静态成员类。
上述有点难以理解,那么看看代码就好了~
首先看一下我们自己的项目中的话,定义的不是足够规范的builder
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoBuilder implements Cloneable {
private String imageBase64;
public DemoBuilder buildImageBase64(String imageBase64) {
this.setImageBase64(imageBase64);
return this;
}
@Override
public DemoBuilder clone() throws CloneNotSupportedException {
return (DemoBuilder) super.clone();
}
}
这是自己手写的 不够规范的builder~
那么其实思想就是
在构建这个对象的时候就可以用bulider模式~
DemoBuilder demoBuilder = new DemoBuilder().buildImageBase64(""));
类似这样来返回一个builder对象!
但是这样写其实不规范,虽然思想是用链式的把参数一起放进去,setter中每个都返回this对象,
最后应该给一个Bulid的构造函数来返回这个对象。
建造者模式讲解:
Carson带你学设计模式:建造者模式(Builder Pattern)_Carson带你学Android-CSDN博客_建造者模式
以上是关于lombok中使用建造者模式的好处的主要内容,如果未能解决你的问题,请参考以下文章