java设计模式之建造者模式学习


建造者模式(Builder Pattern)是一种对象创建型设计模式,它通过构建复杂对象的一个表示来指导一个稳定算法逐步构建该对象。建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

### 建造者模式的主要角色

1. **产品(Product)**:复杂对象,具体的产品类。

2. **抽象建造者(Builder)**:为创建产品对象的各个部件指定抽象接口。

3. **具体建造者(Concrete Builder)**:实现Builder接口,构造和装配产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

4. **指挥者(Director)**:构造一个使用Builder接口的对象。该对象主要负责控制产品的生成过程,它主要通过组合具体建造者类的对象来指导如何生成对象,并不涉及具体产品信息的细节。

### 示例代码

以下是一个简单的Java示例,演示了建造者模式的基本结构:


// 产品类
public class Product {
    private String partA;
    private String partB;

    // 构造方法通常设置为private或protected,通过Builder类来构建
    private Product() {}

    // getter和setter方法
    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    // 示例:展示产品信息
    public void show() {
        System.out.println("Product - PartA: " + partA + ", PartB: " + partB);
    }
}

// 抽象建造者
public interface Builder {
    Builder buildPartA(String partA);
    Builder buildPartB(String partB);
    Product getResult();
}

// 具体建造者
public class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public Builder buildPartA(String partA) {
        product.setPartA(partA);
        return this;
    }

    @Override
    public Builder buildPartB(String partB) {
        product.setPartB(partB);
        return this;
    }

    @Override
    public Product getResult() {
        return product;
    }
}

// 指挥者
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    // 构造产品
    public Product construct() {
        builder.buildPartA("PartA").buildPartB("PartB");
        return builder.getResult();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);

        Product product = director.construct();
        product.show();
    }
}

这个示例展示了如何使用建造者模式来构建`Product`对象。通过`Builder`接口和`ConcreteBuilder`类,我们可以灵活地构建复杂对象,而不需要在`Product`类中暴露过多的构建细节。`Director`类则负责控制构建过程,确保构建步骤的顺序和正确性。