简介
一个复杂的对象有很多组成成分, 如汽车, 车轮, 方向盘, 发动机,等等. 为了在构建过程中对外部隐藏实现细节, 就可以使用 Builder 模式将部件和组装过程分离, 使得构建过程和部件都可以自由扩展, 两者之间的耦合也将到了最低.
- 定义 : 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示.
- 场景 :
- 当初始化一个队形特别复杂, 参数特别多, 且有很多参数都具有默认值时.
- 相同的方法, 不同的执行顺序, 产生不同的事件结果时
- 多个部件或零件, 都可以装配到一个对象中, 但是产生的运行结果又不相同.
举例
一个网络库的Builder
public static final class Builder {
//只列出一些常用的功能,默认如下
private int connectTimeOut = -1;
private int readTimeOut = -1;
private boolean doInput = true;
private boolean doOutput = false;
private boolean useCaches = false;
//请求头
private final List<String> keys = new ArrayList<>();
private final List<String> values = new ArrayList<>();
private CookieJar cookieJar;
public Builder() {
}
public Builder cookieJar(CookieJar cookieJar) {
this.cookieJar = cookieJar;
return this;
}
...
public NetworkConnection build() {
return new NetworkConnection(connectTimeOut, readTimeOut, doInput, doOutput, useCaches, keys, values, cookieJar);
}
}