返回
一个模式,千种设计 - 建筑之王建造者模式
后端
2024-01-29 08:34:20
当然,以下是一篇专业且符合要求的技术博客文章,您可以参考:
什么是建造者模式?
建造者模式(Builder Pattern)是创建型设计模式之一,它提供了一种创建复杂对象的最佳方式。这种设计模式将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的优点
建造者模式具有以下优点:
- 代码复用:建造者模式可以将复杂对象的构建过程分解成多个步骤,这些步骤可以被复用,以创建不同的复杂对象。
- 低耦合:建造者模式将复杂对象的构建与它的表示分离,使得这两部分可以独立变化,提高了代码的灵活性。
- 可扩展性:建造者模式可以很容易地扩展,以创建新的复杂对象,而不需要修改现有的代码。
建造者模式的缺点
建造者模式也存在一些缺点:
- 代码复杂性:建造者模式的代码可能比直接创建复杂对象更复杂。
- 性能开销:建造者模式可能会增加一些性能开销,因为需要创建多个对象。
建造者模式的使用场景
建造者模式可以用于以下场景:
- 需要创建复杂的对象。
- 需要创建不同表示的复杂对象。
- 需要对复杂对象的构建过程进行控制。
建造者模式的实现
建造者模式的实现方式有很多种,最常见的一种是使用一个接口来定义复杂对象的构建过程,然后使用多个具体的建造者类来实现这个接口。
以下是一个使用建造者模式创建复杂对象的例子:
interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product getProduct();
}
class ConcreteBuilder1 implements Builder {
private Product product;
public ConcreteBuilder1() {
this.product = new Product();
}
@Override
public void buildPartA() {
product.addPart("Part A");
}
@Override
public void buildPartB() {
product.addPart("Part B");
}
@Override
public void buildPartC() {
product.addPart("Part C");
}
@Override
public Product getProduct() {
return product;
}
}
class ConcreteBuilder2 implements Builder {
private Product product;
public ConcreteBuilder2() {
this.product = new Product();
}
@Override
public void buildPartA() {
product.addPart("Part A'");
}
@Override
public void buildPartB() {
product.addPart("Part B'");
}
@Override
public void buildPartC() {
product.addPart("Part C'");
}
@Override
public Product getProduct() {
return product;
}
}
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
class Product {
private List<String> parts = new ArrayList<>();
public void addPart(String part) {
parts.add(part);
}
public String toString() {
return String.join(",", parts);
}
}
public class Main {
public static void main(String[] args) {
Builder builder1 = new ConcreteBuilder1();
Director director1 = new Director(builder1);
director1.construct();
Product product1 = builder1.getProduct();
System.out.println(product1);
Builder builder2 = new ConcreteBuilder2();
Director director2 = new Director(builder2);
director2.construct();
Product product2 = builder2.getProduct();
System.out.println(product2);
}
}
输出结果:
Part A,Part B,Part C
Part A',Part B',Part C'