之所以会写这篇文章,其实是有原因的,自己整理了一篇文章是关于Lombok的介绍和使用的文章,它里面涉及到了今天我们想要分享的设计模式Builder模式。
建议在阅读这篇文章之前,请先移步到java开发人员需要掌握的链式编程这里了解一下关于链式编程是如何实现的,为什么会我会写链式编程呢。
还是一贯的风格来写文章吧,希望自己可以摸索出属于自己的写作文章思路,坏笑。
ok,我们下面看下Builder模式的示例程序好了。
Tips:左右滑动可以看完整代码信息。
import java.util.Date;
public class BuilderTest {
public static void main(String[] args) {
User user=new User();
user.setName("感谢关注微信公众号~后端Coder");
user.setAge(1);
System.out.println("user = " + user);//user = User{name='感谢关注微信公众号~后端Coder', age=1, birthday=null, IdCard='null', height=null, weight=null}
}
static class User{
private String name;
private Integer age;
private Date birthday;
private String IdCard;
private Integer height;
private Integer weight;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public User(String name, Integer age, Date birthday, String idCard, Integer height, Integer weight) {
this.name = name;
this.age = age;
this.birthday = birthday;
IdCard = idCard;
this.height = height;
this.weight = weight;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", IdCard='" + IdCard + '\'' +
", height=" + height +
", weight=" + weight +
'}';
}
}
}
ok,我们先分析上面的示例程序好了,我们要实现的内容就是为创建的对象user赋值,然后打印输出信息,一般我们都是使用new关键字进行无参构造函数的创建,然后调用set方法进行赋值操作。
User user=new User();
user.setName("感谢关注微信公众号~后端Coder");
user.setAge(1);
System.out.println("user = " + user);//user = User{name='感谢关注微信公众号~后端Coder', age=1, birthday=null, IdCard='null', height=null, weight=null}
上面的传统方法的实现,你应该会了,下面我们继续看下后面的另外的一种方式,使用带参构造函数来创建对象和赋值,还是看示例程序代码吧。
User user=new User("后端Coder",1);
System.out.println("user = " + user);
是不是比上面一步一步赋值看的简洁了许多,或许是,或许不是,在这里你有没有思考过这样一个问题,一般创建一个类的时候成员属性不仅仅只有三五个,十几个成员属性或者几十个成员属性都要设置,无论我们采用第一种方式进行set,还是第二种方式进行构造函数传参,都失为一种明智做法。
在这里还是说明一下利用构造函数传参的方式对于调用者来说极为不方便,建议成员属性太多的时候还是别使用带参这种构造函数了。
下面,我们看下今天Builder模式是如何发挥它的价值的吧。来来来,我们还是先走个示例程序。
public class BuilderTest {
public static void main(String[] args) {
Worker worker = new Worker.Builder().id(1).name("后端Coder").age(1).sex("男").build();
System.out.println(worker);//Worker{id=1, name='后端Coder', sex='男', age=1}
}
public static class Worker {
private int id;
private String name;
private String sex;
private int age;
@Override
public String toString() {
return "Worker{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public static class Builder {
private int id;
private String name;
private String sex;
private int age;
public Builder() {
}
public Builder id(int id) {
this.id = id;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Worker build() {
return new Worker(this);
}
}
private Worker(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.sex = builder.sex;
this.age = builder.age;
}
}
}
我们接下来分析下上面的示例程序就可以结束这篇文章了。
在Worker类里面定义一个静态内部类Builder类,在静态内部类里面使用链式编程的方式为对应的属性进行赋值java开发人员需要掌握的链式编程创建我们需要的Worker对象,最后输出我们创建的worker信息,这就是Builder模式的使用了,是不是很方便。