创建型 - 建造者模式

目录
设计思想
建造者模式的目的是将一个复杂对象的构建过程与其具体表示分离,使得同样的构建过程可以创建不同的表示。
它以一种更加灵活的方式构建复杂对象,而不需要直接调用其构造函数或者在构造函数中传递大量参数。
这提高了代码的可读性、可维护性,并允许在不同的情境中构建不同表示的对象。
建造者模式尤其适用于需要构建对象的构建过程比较复杂,包含多个可选部分的情况。
类图
代码实现
public class BuilderTest {
interface Builder {
void reset();
void buildStepA();
void buildStepB();
void buildStepC();
}
class Product1 {}
class Product2 {}
class ConcreteBuilder1 implements Builder {
private Product1 result;
@Override
public void reset() {
this.result = new Product1();
}
@Override
public void buildStepA() {
// do something
}
@Override
public void buildStepB() {
// do something
}
@Override
public void buildStepC() {
// do something
}
public Product1 getResult() {
return result;
}
}
class ConcreteBuilder2 implements Builder {
private Product2 result;
@Override
public void reset() {
this.result = new Product2();
}
@Override
public void buildStepA() {
// do something
}
@Override
public void buildStepB() {
// do something
}
@Override
public void buildStepC() {
// do something
}
public Product2 getResult() {
return result;
}
}
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void make() {
this.builder.reset();
this.builder.buildStepA();
this.builder.buildStepB();
this.builder.buildStepC();
}
}
public static void main(String[] args) {
Builder builder = new ConcreteBuilder1();
Director director = new Director(builder);
director.make();
Product1 product = builder.getResult();
}
}
优缺点
优点:
- 可以分步创建对象,暂缓创建步骤或递归运行创建步骤。
- 生成不同形式的产品时,你可以复用相同的制造代码。
- 符合单一职责原则;你可以将复杂构造代码从产品的业务逻辑中分离出来。
- 易于扩展,具有更好的代码可读性。
缺点:
- 由于该模式需要新增多个类,因此代码整体复杂程度会有所增加。
适用场景
- 建造者模式适用于构建过程复杂、有多个可选部分的对象,特别是对象的构建步骤比较多、步骤顺序灵活变化的情况。
- 当需要创建多种不同表示的对象时,可以使用建造者模式,每个具体建造者对应一种表示。
- 如果构建过程中存在一些可选的部分,而客户端需要根据需求选择性地构建这些部分,建造者模式提供了灵活的解决方案。
- 如果对象的构建过程相对稳定,但需要根据不同的需求创建不同的表示,建造者模式是一个很好的选择。