定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
四个角色
- 产品类(Product):有模板方法和基本方法。
- 抽象建造者(Builder):规范产品的组建,一般是由子类实现。
- 具体建造者(ConcreteBuilder):实现抽象类定义的所有方法,并返回一个组建好的对象。
- 导演类(Director):负责安排已有模块的顺序。
代码实现
产品类 Product.java
public class Product {
public void dosomething(){
//实现一些业务
}
}
抽象建造者 Builder.java
public abstract class Builder {
//设置不同的部分以获得不同的产品
public abstract void setPart();
//建造产品
public abstract Product buildProduct();
}
具体建造者 ConcreteBuilder.java
public class ConcreteBuilder extends Builder {
private Product product = new Product();
public void setPart(){
//产品内的逻辑处理
}
public Product buildProduct(){
return product;
}
}
导演 Director.java
public class Director {
private Builder builder = new ConcreteBuilder();
//构建不同的产品
public Product getAProduct(){
builder.setPart();
//生产不同的产品。
return builder.buildProduct();
}
}
建造者模式的优点
- 封装性:客户端不需要知道内部的组成细节。
- 建造者独立:容易扩展,不同类型的建造者相互独立,利于扩展。
- 便于控制细节风险:由于具体的建造者是独立,因此可以对建造过程逐步细化,而不对其他的模块产生影响。
使用场景
- 方法相同,执行的顺序不同,产生不同的事件结果时,可以采用的建造者模式。
- 多个部件装配到同一个对象中,但又希望产生的运行结果又不相同的时候。
- 产品类型非常复杂,或者产品类中得不同的顺序可以来带不同效果的时候。