建造者模式(Builder Pattern)是一种创建型设计模式,用于构建复杂对象。它允许分步构造一个复杂对象,并允许按不同方式构建和表示复杂对象的部分。建造者模式通常包含以下几个角色:
- Builder(抽象建造者) :定义创建复杂对象的接口。
- ConcreteBuilder(具体建造者) :实现抽象建造者接口,构建和提供复杂对象。
- Product(产品角色) :复杂对象的表示。
- Director(指挥者) :负责构建对象的步骤,使用Builder接口。
建造者模式的典型代码结构如下:
// 产品类
public class Product {
private List<String> parts;
public void add(String part) {
parts.add(part);
}
public void show() {
System.out.println("Product Parts --");
for (String part : parts) {
System.out.println(part);
}
}
}
// 抽象建造者
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartOne();
public abstract void buildPartTwo();
public Product getResult() {
return product;
}
}
// 具体建造者
public class ConcreteBuilder extends Builder {
@Override
public void buildPartOne() {
product.add("Part One");
}
@Override
public void buildPartTwo() {
product.add("Part Two");
}
}
// 指挥者
public class Director {
public void construct(Builder builder) {
builder.buildPartOne();
builder.buildPartTwo();
}
}
使用建造者模式的示例:
public class Client {
public static void main(String[] args) {
Director director = new Director();
Builder builder = new ConcreteBuilder();
director.construct(builder);
Product product = builder.getResult();
product.show();
}
}
输出结果:
Product Parts --
Part One
Part Two
建造者模式的优点包括:
- 封装性:创建复杂对象的步骤被封装在建造者类中。
- 灵活性:指挥者可以改变创建具体建造者对象的顺序,增加新的建造者不影响现有代码。
- 独立性:用户不必知道复杂对象的内部表示,只通过建造者来创建对象。
缺点包括:
- 类的数目增多:每增加一个产品类就要增加一个建造者类。
- 性能问题:如果产品内部状态较少,建造者模式可能会使系统性能下降。
建造者模式适用于创建复杂对象的场景,特别是当对象的创建过程较为复杂或者需要构建多种不同的表示时。