构建者模式作用:可以根据客户需要,去帮我们创建指定的对象。
创建对象方式1:
Student stu = new Student(1,"zhangsan");
第一种方式创建的对象:比较死板,只能根据构造方法的参数去设置创建对象
比如说Student的构造参数有10个,这10个参数都是配置到配置文件中的,而且都不是必须项(可能配置文件只配置几项)
我想获取几个参数,就根据这几个参数去创建我们的对象。
创建对象方式2:
Student stu = new Student();
stu.setId(1);
stu.setName("zhangsan");
使用第二种方式去创建对象,需要等待初始化完成才能正常使用。
构建者模式的角色:
导演类
构建者
产品
效果:
StudentBUilder.id(1).name("lisi").age(20).build();-----这就是构建者模式的玩法
代码示例
package com.wang.b_builder;
public class StudentBuilderDemo {
public static void main(String[] args) {
// 第一种方式创建对象:比较死板,只能根据构造方法的参数去设置创建对象
Student student = new Student("1", "wangchao", 33);
// 第二种方式创建对象: 创建对象后,需要等待初始化完成才能正常使用。
Student2 student2 = new Student2();
student2.setId("1");
student2.setName("wangchao");
student2.setAge(33);
// 构建者模式1
Student3 student3 = new StudentBuilder().id("1").name("wangchao").age(33).build();
// 构建者模式2
Student4.Builder builder = new Student4.Builder().id("1").name("wangchao").age(33);
Student4 student4 = builder.build();
student4 = new Student4.Builder().id("1").name("wangchao").age(33).build();
}
}
第一种方式创建对象:根据构造方法的参数去设置创建对象
package com.wang.b_builder;
public class Student {
private String id;
private String name;
private int age;
public Student(String id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
}
第二种方式创建对象: 创建对象后,需要等待初始化完成才能正常使用
Student2 student2 = new Student2();
student2.setId("1");
student2.setName("wangchao");
student2.setAge(33);
package com.wang.b_builder;
public class Student2 {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
构建者模式1
Student3 student3 = new StudentBuilder().id("1").name("wangchao").age(33).build();
package com.wang.b_builder;
public class StudentBuilder {
private Student3 student = new Student3();
public StudentBuilder id(String id) {
student.setId(id);
return this;
}
public StudentBuilder name(String name) {
student.setName(name);
return this;
}
public StudentBuilder age(int age) {
student.setAge(age);
return this;
}
public Student3 build() {
return student;
}
}
package com.wang.b_builder;
public class Student3 {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
构建者模式2
Student4.Builder builder = new Student4.Builder().id("1").name("wangchao").age(33);
Student4 student4 = builder.build();
student4 = new Student4.Builder().id("1").name("wangchao").age(33).build();
package com.wang.b_builder;
public class Student4 {
private String id;
private String name;
private int age;
public static class Builder {
private Student4 student = new Student4();
public Builder id(String id) {
student.id = id;
return this;
}
public Builder name(String name) {
student.name = name;
return this;
}
public Builder age(int age) {
student.age = age;
return this;
}
public Student4 build() {
return student;
}
}
}