这是我参与更文挑战的第23天,活动详情查看:更文挑战
一、什么是构建器模式
1.概念
构建器( Builder )模式,有的也叫建造者模式。
构建器模式的设计是为了能够让对象的创建更加方便,一般是会设计两个类,一个类是目标类,也就是我们需要的类;另一个类就是构建器类,它是为了我们创建目标类时更加的方便。
2.构建器模式的使用场景
- 目标类的属性过多。当我们需要设置参数时,就需要一个一个去set,或者重载构造方法,前者就会让编写的代码十分繁琐;后者就难以重载自己想要的构造方法。
- 目标类的属性结构复杂。如果我们每次使用目标类时,都要手动的去设置属性,还要关心它们的内部结构,那么使用目标类的体验感是很差的。
3.优点
- 扩展性高。
- 使用方便。
4.缺点
- 需要创建构建器类。
- 依赖性高。一旦目标类改变,构建器也需要改变。
5.原则
“+”代表遵守,“-”代表不遵守或者不相关
原则 | 开放封闭 | 单一职责 | 迪米特 | 里氏替换 | 依赖倒置 | 接口隔离 | 合成复用 |
---|---|---|---|---|---|---|---|
– | + | – | – | – | – | – | |
二、简单的构建器模式实现
1.代码
User
package build;
/**
* @author xxj
* 用户
*/
public class User {
private String name;
private int age;
private String sex;
public User() {
}
public User(UserBuild build) {
this.age=build.age;
this.name=build.name;
this.sex=build.sex;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
复制代码
UserBuild
package build;
/**
* @author xxj
* 用户构建器
*/
public class UserBuild {
public String name;
public int age;
public String sex;
public UserBuild(){}
public UserBuild name(String name){
this.name=name;
return this;
}
public UserBuild age(int age){
this.age=age;
return this;
}
public UserBuild sex(String sex){
this.sex=sex;
return this;
}
public User build(){
return new User(this);
}
}
复制代码
2.使用
package test;
import build.User;
import build.UserBuild;
public class test {
public static void main(String[] args){
UserBuild build=new UserBuild();
build.name("xiaoming").age(18).sex("男");
User user=new User(build);
System.out.println(user.toString());
}
}
复制代码
结果
3.注意
- 构建器的创建时,需要注意,它的方法返回的是 this。
- 构建器还可以给属性设置默认值,这样可以省去很多默认参数的设置。
4.最后
我发现这个构建器可以更加的简便一点,完全不需要创建多余的对象
/**
* @author xuxiaobai
* 用户
*/
public class User {
private String name;
private int age;
private String sex;
public User() {
}
public String getName() {
return name;
}
public User setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public User setAge(int age) {
this.age = age;
return this;
}
public String getSex() {
return sex;
}
public User setSex(String sex) {
this.sex = sex;
return this;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
复制代码
这里的每个 set 方法都会返回当前的对象,这样就省去了 UserBuild 这个类,想要使用也很简单,IDEA 就可以帮我们快速地生产模板。
IDEA 的 Builder 使用步骤:
- 按住 Alt + Insert ,或者按右键
- 进入 Getter and Setter
- 更改 Set 方法的模板
- 最后选中全部属性,点击创建即可。
三、总结
构建器模式的设计思想就是能够更加便捷地创建一个对象,从上面的例子也可以看出,当属性较少时,没有必要创建一个构建器,但是我举这个例子想表达就是这个想法:创建一个构建器来构建一个对象。
当属性越来越复杂时,构建器的作用就会体现出来了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END