定义
将构建复杂对象的过程和它的部件解耦,使构建过程与部件的表示分离,使得同样的构建过程可以创建不同的表示的创建型模式。
特点
Builder模式一步一步创建一个复杂对象,允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。
Builder是非线程安全的,所以如果要在Builder内部类中检查一个参数的合法性,必需要在对象创建完成之后再检查。
应用场景
初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时;
复杂产品类中的调用顺序不同产生不同的效能时;
相同方法不同的执行顺序,产生不同的事件结果时;
角色
Product——产品类 : 产品的抽象类。
Builder——抽象类, 规范产品的组建,一般是由子类实现具体的组件过程。
ConcreteBuilder——具体的构建者。
Director——指挥者,统一组装过程(可省略,Builder定义为Product的内部类,ConcreteBuilder在Product子类中)。
模式代码
/**
* 1.产品类
* 如果有多个产品类则继承该类,每个产品类有对应的具体的建造者
*/
public class Product{
public void doSomething() {
// 处理业务
}
}
/**
* 2.抽象建造者
* 有多个产品类则有多个具体的建造者
*/
public abstract class Builder{
// 设置产品零件:设置产品的不同零件,或者不同的装配顺序,以产生不同的产品
public abstract void setPart();
// 组建一个产品
public abstract Product buildProduct();
}
/**
* 3.具体建造者
*/
public class ConcreteBuilder extends Builder{
private Product product =new Product();
// 设置产品零件
public void setPart() {
// 产品类内的逻辑处理
}
// 组建一个产品
public Product buildProduct() {
return product;
}
}
/**
* 4.指挥者类
* 指挥者类起到封装的作用,避免高层模块深入到建造者内部的实现类
*/
public class Director{
private Builder builder =new ConcreteBuilder();
public Product getProduct() {
builder.setPart();
return builder.buildProduct();
}
}
网友评论