2022-09-21 09:59:51
浏览数 (1)
建造者模式
适用场景
- 创建对象的参数很多 如果参数为非必填的话,可以使用set方法,必填的通过构造方法传入,并进行校验。但是必填项很多时,构造方法的参数列表就很臃肿了。
- 属性之间有依赖关系
参数过多时使用set方法传入,依赖关系校验就不可控了。因为对象已经创建好了,无法控制对象使用前,是否执行了set方法。
示例
代码语言:javascript
复制public class ResourcePoolConfig {
private String name;
private Integer maxTotal;
private Integer maxIdle;
private Integer minIdle;
// 利用builder来创建对象
public ResourcePoolConfig(Builder builder) {
this.name = builder.name;
this.maxTotal = builder.maxTotal;
this.maxIdle = builder.maxIdle;
this.minIdle = builder.minIdle;
}
public static class Builder {
private String name;
private Integer maxTotal;
private Integer maxIdle;
private Integer minIdle;
public ResourcePoolConfig build() {
// 判空校验
if (name == null) {
throw new IllegalArgumentException("name should not be null");
}
/
// 业务校验
if (maxIdle minIdle > maxTotal) {
throw new IllegalArgumentException("maxIdle minIdle should not greate than maxTotal");
}
// 校验通过,才创建对象
return new ResourcePoolConfig(this);
}
// set方法
public Builder setName(String name) {
this.name = name;
return this;
}
// ...
}
}
优点
- 参数多时,避免构造函数臃肿
- 灵活性高,避免构造函数重载多次
- 可对属性依赖关系校验