为什么要用建造者模式
因为如果不使用建造者模式,使用一个类时,类中可能会创建很多重载的构造方法。
当使用了建造者模式,使用一个类时,可以选择性地给对象的属性赋值,避免类中可能会创建很多重载的构造方法。
以下是最简单的例子:
示例1:
import lombok.Data;
/**
* 建造者模式
*/
@Data
public class Person {
private String name;
private int age;
private String gender;
private Person() {
this.gender = "男" ;
}
public static class Builder {
private final Person person;
public Builder() {
this.person = new Person();
}
public Builder(String name, int age) {
this.person = new Person();
this.person.name = name;
this.person.age = age;
}
public Builder name(String name) {
this.person.name = name;
return this;
}
public Builder age(int age) {
this.person.age = age;
return this;
}
public Builder gender(String gender) {
this.person.gender = gender;
return this;
}
public Person build() {
return person;
}
}
public static void main(String[] args) {
// 这里没有传gender
Person person = new Person.Builder()
.name("小红")
.age(30)
.build();
System.out.println(person);
// 使用构造方法重载
Person person1 = new Person.Builder("小明", 20)
.build();
System.out.println(person1);
}
}
示例2:直接使用@Builder注解
@Builder会默认给你生成全参构造方法,这里不能再自行定义构造方法了,否则报错。这种方式有局限性。
import lombok.Builder;
import lombok.Data;
/**
* 建造者模式
*/
@Builder
@Data
public class Person1 {
private String name;
private int age;
private String gender;
public static void main(String[] args) {
Person1 person1 = Person1.builder()
.name("小红")
.age(30)
.build();
System.out.println(person1);
}
}