建造者模式: 一步一步建造一个对象;
文章目录
- 建造者模式: 一步一步建造一个对象;
- 前言
- 一、建造者模式的作用
- 二、如何实现建造者模式
- 第一种: 改写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 那样去处理;