建造者模式和工厂模式的职责比较相像,他们都是为了封装创建对象的创建过程。但是工厂模式的侧重点是为我们提供了一系列具有相同特点对象的创建,而建造者模式关注的是复杂对象的创建,建造者模式可以让我们灵活的编排对象内属性的构建顺序。
建造者模式的各个角色:
创建复杂对象
public class Product {
private String partA;
private String partB;
private String partC;
public void show(){
system.out.println(this)
}
}
复制代码
创建抽象的建造者角色
public interface Builder {
public void setPartA();
public void setPartB();
public void setPartC();
public Product build();
}
复制代码
创建具体的建造者角色
public class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
product = new Product();
}
@Override
public void setPartA() {
product.setPartA("Part A");
}
@Override
public void setPartB() {
product.setPartB("Part B");
}
@Override
public void setPartC() {
product.setPartC("Part C");
}
@Override
public Product build() {
return product;
}
}
复制代码
创建指挥者
public class Director {
private Builder builder;
// 指定建造者
public Director(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.setPartA();
builder.setPartB();
builder.setPartC();
return builder.build();
}
}
复制代码
优点
缺点
总而言之,建造者模式重在打造,复杂对象,该对象由多个部件组成,而且需要对构建这些部件的顺序进行控制,就把房子比作是我们要构建的对象,那么我们在构建房子的时候必须要先打地基,再砌墙,如果不按照一定规则来是盖不成房子的,而这个指挥者就是包工头,或者是房子的设计师,他会让工人按照一定规则去搭建房子。