需求:
- 创建Bean实例时需要传入多个参数
- 需要控制参数的访问权限,防止被其他使用者修改
- 能够做参数有效性检查
构建器
public class BuilderModel {
private String name;
private int age;
/**
* 隐藏
*/
private BuilderModel() {
}
private BuilderModel(Builder builder) {
this.age = builder.age;
this.name = builder.name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
/**
* 构建器
*/
public static class Builder {
private String name;
private int age;
/**
* 开放构建器
*/
public Builder() {
}
public Builder name(String name) {
if (name == null) {
throw new IllegalArgumentException("name must not be null");
}
this.name = name;
return this;
}
public Builder age(int age) {
if (age < 0) {
throw new IllegalArgumentException("age must not below 0");
}
this.age = age;
return this;
}
/**
* 创建目标实例
*/
public BuilderModel build() {
return new BuilderModel(this);
}
}
}
构建
BuilderModel.Builder builder = new BuilderModel.Builder();
BuilderModel builderModel = builder.age(12).name("pepelu").build();
能够在age()
,name()
方法时进行参数校验与处理,设置默认值或者抛出IllegalArgumentException
,不必等到build时再去判断参数有效性问题。
传参
Program program = new Program();
program.fuck(builderModel);
使用
private void fuck(BuilderModel builderModel) {
System.out.println(builderModel.getAge());
System.out.println(builderModel.getName());
}
类似于Android里面的AlertDialog,Facebook sdk里面的SharedLinkContent
网友评论