意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示。
适用性
// 产品类:我们要构建的复杂对象
class Computer {
// 必需参数
private String cpu;
private String gpu;
// 可选参数
private int memory;
private int disk;
// 构造器私有:只能通过建造者创建对象
private Computer(Builder builder) {
this.cpu = builder.cpu;
this.gpu = builder.gpu;
this.memory = builder.memory;
this.disk = builder.disk;
}
// 生成器类(静态内部类):核心建造者
public static class Builder {
// 必需参数(建造者必须和产品保持一致)
private String cpu;
private String gpu;
// 可选参数(可以给默认值)
private int memory = 8;
private int disk = 256;
// 构造方法:传入**必填**参数
public Builder(String cpu, String gpu) {
this.cpu = cpu;
this.gpu = gpu;
}
// 链式调用方法:设置可选参数,返回 Builder 自身
public Builder memory(int memory) {
this.memory = memory;
return this;
}
public Builder disk(int disk) {
this.disk = disk;
return this;
}
// 构建方法:返回最终的产品对象
public Computer build() {
return new Computer(this);
}
}
// 打印信息(方便测试)
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", gpu='" + gpu + '\'' +
", memory=" + memory +
", disk=" + disk +
'}';
}
}
// 测试类
public class BuilderTest {
public static void main(String[] args) {
// 链式调用创建对象,可读性极强
Computer computer1 = new Computer.Builder("i9", "RTX4090")
.memory(32)
.disk(1024)
.build();
// 只传必填参数,使用默认可选值
Computer computer2 = new Computer.Builder("i5", "RTX3060").build();
System.out.println(computer1);
System.out.println(computer2);
}
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。