建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于创建复杂对象,这些对象的构建过程可能会很复杂,或者需要按照特定的顺序进行。
建造者模式的主要组成部分包括:
- 产品(Product):表示要创建的复杂对象。
- 抽象建造者(Builder):定义了一个抽象接口,用于指导具体建造者如何构建产品的各个部分。
- 具体建造者(ConcreteBuilder):实现了抽象建造者接口,具体实现了如何构建产品的各个部分。
- 指导者(Director):负责调用具体建造者的方法,按照特定的顺序构建产品。
建造者模式的优点:
- 分离了对象的构建和表示:建造者模式将对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。
- 易于扩展:建造者模式可以通过添加新的具体建造者来扩展产品的构建过程,而不需要修改已有的代码。
- 提高了代码的可读性和可维护性:建造者模式将对象的构建过程和表示分离,使得代码更加清晰和易于维护。
Java 实现建造者模式的示例代码:
// 产品类
public class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
public void show() {
System.out.println("Product: " + partA + ", " + partB + ", " + partC);
}
}
// 抽象建造者接口
public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product getProduct();
}
// 具体建造者类
public class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
product = new Product();
}
@Override
public void buildPartA() {
product.setPartA("Part A");
}
@Override
public void buildPartB() {
product.setPartB("Part B");
}
@Override
public void buildPartC() {
product.setPartC("Part C");
}
@Override
public Product getProduct() {
return product;
}
}
// 指导者类
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.getProduct();
product.show();
}
}
在这个示例中,我们定义了一个产品类 Product,它包含了三个部分:partA、partB 和 partC。接着,我们定义了一个抽象建造者接口 Builder,它包含了构建产品各个部分的方法。然后,我们实现了一个具体建造者类 ConcreteBuilder,它实现了抽象建造者接口,并具体实现了如何构建产品的各个部分。最后,我们定义了一个指导者类 Director,它负责调用具体建造者的方法,按照特定的顺序构建产品。
在客户端代码中,我们创建了一个具体建造者对象,并将其传递给指导者对象。然后,我们调用指导者的 construct() 方法来构建产品。最后,我们通过调用建造者的 getProduct() 方法获取构建好的产品,并调用产品的 show() 方法来显示产品的信息。