建造者模式: 一步一步建造一个对象;
文章目录
- 建造者模式: 一步一步建造一个对象;
- 前言
- 一、建造者模式的作用
- 二、如何实现建造者模式
- 第一种: 改写set方法
- 第二种: 直接使用lombok 的 @Builder
- 总结
前言
建造者模式一般使用场景是: 一个复杂的对象创建过程,分步骤执行,一步一步完成创建,最终创建一个复杂的大对象;
一、建造者模式的作用
使复杂的大对象的创建,变为一步一步的属性的赋值,从而在创建上不那么复杂,使用建造者之后,代码也更佳统一简洁;
二、如何实现建造者模式
第一种: 改写set方法
具体类如下:
@ToString
public class PeopleBean {
private String name;
private String address;
private Double height;
private Double money;
private Integer age;
public String getName() {
return name;
}
public PeopleBean setName(String name) {
this.name = name;
return this;
}
public String getAddress() {
return address;
}
public PeopleBean setAddress(String address) {
this.address = address;
return this;
}
public Double getHeight() {
return height;
}
public PeopleBean setHeight(Double height) {
this.height = height;
return this;
}
public Double getMoney() {
return money;
}
public PeopleBean setMoney(Double money) {
this.money = money;
return this;
}
public Integer getAge() {
return age;
}
public PeopleBean setAge(Integer age) {
this.age = age;
return this;
}
}
@ToString lombok 的注解,仅仅是为了打印方便
一个对象新增所有属性的set/get方法之后,改写set方法为有返回值,返回为当前对象,然后 return this;
这样就相当于每次set 返回的都是当前对象,然后每个set仅仅是构造了对象的一个属性,或者一部分属性
搞个测试类,看下建造者模式的效果;
public class TestBuilder {
public static void main(String[] args) {
PeopleBean peopleBean = new PeopleBean()
.setName("小明")
.setAge(1)
.setAddress("哈哈")
.setHeight(1.45)
.setMoney(100.00);
System.out.println(peopleBean);
}
}
第二种: 直接使用lombok 的 @Builder
之前的对象改为如下:
@ToString
@Builder
@Data
public class PeopleBean {
private String name;
private String address;
private Double height;
private Double money;
private Integer age;
}
这里的@Builder 可以理解为之前改写set那种
直接测试,看结果
public class TestBuilder {
public static void main(String[] args) {
PeopleBean peopleBean = PeopleBean.builder()
.name("小明")
.age(1)
.address("哈哈")
.height(1.45)
.money(100.00)
.build();
System.out.println(peopleBean);
}
}
总结
其实建造者模式,对于之前来说可能确实是个分步构建一个复杂对象的优秀方法,但是现在有了lombok,说实话我觉得这种设计模式已经名存实亡了;
除非真的是那种复杂的对象创建,且有业务逻辑,那确实需要自己去改写set方法,然后返回 this 那样去处理;