视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
利用Builder方式创建对象示例代码
2020-11-27 22:34:48 责编:小采
文档


前言

在创建对象需要初始化数据,数据参数不容易区别,可传可不传的时候,可以考虑使用Builder建造方法创建。每每当看到别人写的用Bulder方式来调用,就觉得so cool,那就自己也来用Builder方式创建对象吧。

下面话不多说了,来一起看看详细的介绍吧

现在要录入一系列人员的基本信息的示例:

创建Person类

public class Person {
private String name;
private int age;
private float height;
private float weight;

public Person(String name, int age, float height, float weight) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}

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;
}

public float getHeight() {
return height;
}

public void setHeight(float height) {
this.height = height;
}

public float getWeight() {
return weight;
}

public void setWeight(float weight) {
this.weight = weight;
}
}

那么创建对象就是这样,后面参数不容易看出表示的是什么,可读性不强

new Person("冯提莫",18,150,43);
new Person("温婉",17,1,48);

用Builder模式进行改造

创建一个Builder类,属性和Person类一样,加上SetXxx()方法

static class Builder{
private String name;
private int age;
private float height;
private float weight;

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public void setHeight(float height) {
this.height = height;
}

public void setWeight(float weight) {
this.weight = weight;
}
}

将Person的构造方法改为传入Builder对象,将Builder对象的属性值都赋予Person对象

public Person(Builder builder){
this.name = builder.name;
this.age = builder.age;
this.height = builder.height;
this.weight = builder.weight;
}

改造Builder类,关键步骤是将各个set方法返回Builder类对象,这样就能继续愉快地连续调用set方法了,最后调用build()创建方法返回Person对象。

static class Builder{
private String name;
private int age;
private float height;
private float weight;

public Builder setName(String name) {
this.name = name;
return this;
}

public Builder setAge(int age) {
this.age = age;
return this;
}

public Builder setHeight(float height) {
this.height = height;
return this;
}

public Builder setWeight(float weight) {
this.weight = weight;
return this;
}

public Person build(){
return new Person(this);
}
}

将各个set方法的返回值类型改为Builder,每次都返回builder对象,这样才能将set方法实现连续的链式调用。

build()方法创建一个person对象,会调用Person的带参构造方法,将builder对象的属性依次赋予person对象。person中的属性值就是链式调用set方法的各个值。

使用Builder模式创建Person对象,明显看出代码可读性大大增强。注:Builder创建方式通常是在创建的对象少的情况下使用。

Person person = new Person.Builder()
.setName("莉哥")
.setAge(20)
.setHeight(162)
.setWeight(45)
.build();

总结

下载本文
显示全文
专题