定义
建造者模式也叫做生成器模式,其定义如下:
Separate the construction of a complex object from its representation so that the sameconstruction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)
建造者模式的UML图如下:
![](https://img.haomeiwen.com/i12070003/efd7f68111099ac7.png)
如图所示,在建造者模式中有4个角色:
- Director(导演类)
责安排已有模块的顺序,然后告诉Builder开始建造。 - Builder(抽象建造者)
规范产品的组建,一般由子类实现。 - ConcreteBuilder(具体建造者)
实现抽象类定义的所有方法,并且返回一个组建好的对象。 - Product(产品类)
指具体建造出来的产品。
建造者模式的通用代码如下:
Product:
public class Product{
public void doSomething(){
//具体的逻辑
}
}
Builder:
public abstract class Builder{
public abstract void setPart(); //设置不同的部分
public abstract Product buildProduct(); //建造产品
}
ConcreteBuilder:
public class ConcreteBuilder extends Builder{
private Product product = new Product();
public void setPart(){
//产品其他部分具体的配置
}
public Product buildProduct(){ //组建产品
return this.product;
}
}
Director:
public class Director{
private Builder builder = new ConcreteBuilder();
public Product getAProduct(){
builder.setPart();
return builder.buildProduct();
}
}
应用
优点
- 封装性
使用建造者模式可以使客户端不必知道产品内部组成的细节。 - 建造者独立,容易扩展
- 便于控制细节风险
因为每一个具体的建造者是独立的,所以当出现差错时不会对其他的模块产生影响。
缺点
- 容易产生多余的对象和导演类
使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果时
- 产品类非常复杂时
- 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时
网友评论