概念
构建者模式 (Builder Pattern)
构建者模式的意义
实际上,在实际开发中,有时候Java构造器编写会有一个问题,由于JVM在编译期是通过方法名和参数类型以及个数来确定方法,当构造器的参数个数和类型都一致时,无法进行方法重载;
利用构造者模式解决
- Builder设计模式最大的优势是可以随意组合构造器输入的参数,避免了重载出错的问题。
- 另外同一个builder可以重复利用,buuld出多个实例对象。
public class Person {
private String name;
private int age;
private String gender;
private Person() {}
// 继承Builder接口
public static class PersonBuider implements Builder<Person> {
String name;
int age;
String gender;
public PersonBuider () {}
public PersonBuider setName (String name) {
this.name = name;
return this;
}
public PersonBuider setAge (int age) {
this.age = age;
return this;
}
public PersonBuider setGender (String gender) {
this.gender = gender;
return this;
}
@Override
public Person build() {
Person person = new Person();
person.name = this.name;
person.age = this.age;
person.gender = this.gender;
return person;
}
}
public static void main(String[] args) {
// 通过链式操作进行构造赋值,解决重载冲突问题
Person person1 = new Person.PersonBuider().setName("XiaoMing").setAge(18).build();
Person person2 = new Person.PersonBuider().setGender("Male").setAge(18).build();
}
}
观察上面代码,我们在Main函数中实现了图片中的功能,解决了方法重载的问题
优雅的实现Builder
下面的代码等同于上面的PersonBuider代码
// 构造器类
@Builder
@Data
public class Person {
private String name;
private int age;
private String gender;
}
------------------------------搞定------------------------------
// 测试代码类
public class PersonTest {
public static void main(String[] args) {
Person person = Person.builder().age(18).name("XiaoMing").build();
System.out.println(person.getAge());
System.out.println(person.getName());
}
}
// print
18
XiaoMing
通过使用Lombok进一步代码简化,几行代码搞定我们的POJO常用的大部分功能,包括POJO构造器、链式赋值、get/set方法
Lombok该提供了更多好用的方法,想了解更多的Lombok——>
点击跳转:https://blog.youkuaiyun.com/wangjunjie0817/article/details/93598817