构建者(builder)模式,也属于创建型设计模式。将复杂对象的构建算法与表示分离,使得同样的构建过程可以创建不同的表示,是抽象工厂模式与模板模式的结合。我们还以汽车为例,设想一下这样的场景,老板要根据很多不同的产品族(车轮、方向盘、空调等部件)组装成各种不同类型的汽车。我们将所有的部件都分别抽象一个接口,如果使用抽象工厂模式,排列组合,将会是一个浩大的工程。构建者模式将架构与表示分离,将非常适合这样的场景。
我看过一些中间件中使用了构建者模式,发现自己的理解跟网上很多人的理解不同。例如,为了展示理解的不同,下面结合我的理解重写建房的例子:
public class House {
private final String window;
private final String floor;
public String getWindow() {
return window;
}
public String getFloor() {
return floor;
}
public static class Builder {
private String window = “”;//默认值
private String floor = "";//默认值
public Builder setWindow(String window) {
this.window = window;
return this;
}
public Builder setFloor(String floor) {
this.floor = floor;
return this;
}
public House builder() {
return new House(this);
}
}
private House(Builder builder) {
window = builder.window;
floor = builder.floor;
}
}
个人理解:构建者模式最重要的是,被构建类的构造方法不能被除了Builder类之外的其他类访问到(单例模式也是这样),并且在Builder类中能临时存储构造需要的数据,以达到构建与表示的分离。有没有director角色其实没有那么重要,不要拘泥于设计模式,关于不要拘泥于设计模式,之后还会提到。
原文:http://blog.csdn.net/wodeyuer125/article/details/44673449