一、前言
在创建一个对象的时候,你是否是酱紫写:
Student();
Student(String name);
Student(String name,int age);
Student(String name,int age,String address);
Student(String name,int age,String address,String id);
上面的写法虽然效率高,但也有一些不足,对于代码后期维护和协同开发会是一件很痛苦的事情。
再看看别人是酱紫写的:
Student stu = new Student.Builder("小明")
.setAge(22)
.setAddress("青岛")
.build();
System.out.println(stu);
是不是很优雅,而且在很多框架中也能看到这样写的身影。没错这就是接下来要讲的构建者模式,这样好处是易于扩展和类的使用,但同时也失去了一些效率。
二、构建者模式
构建者模式实例代码也没啥好讲的,大家记住,照着写就行,代码如下:
public class Student {
private final String name;
private int age;
private String address;
private Student(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public static class Builder {
//假设名字是必传,并且不会变,我们设置成final
private final String name ;
private int age ;
private String address ;
//对象中如果有必传参数,应该写在这个地方。
public Builder(String name) {
this.name = name;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setAddress(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this);
}
}
}
使用方法如下:文章来源:https://www.toymoban.com/news/detail-508537.html
Student student = new Student.Builder("小明") // 这个地方要传的参数往往都是必传数。
.setAge(12)
.setAddress("青岛")
.build();
注意
Builder内部类中的属性要和Student中的相同。
如果Student中属性有final修饰,Builder对应的属性也需要用final修饰。
并且内部类中构造方法,传入必传属性
结尾
是不是看上去逼格瞬间上去了,非必传属性可以根据需要任意设置,非常灵活,而且这样先设置属性再创建对象,最终获取的对象一定是你预期的完整对象,不会像用之前set的方法创建的对象可能还没有设置完全。文章来源地址https://www.toymoban.com/news/detail-508537.html
到了这里,关于设计模式-构建者(Builder)模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!