一. 建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,用于创建复杂对象。它将一个对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。
适用场景:
- 创建对象的构造过程比较复杂,包含多个可选参数或具有多个步骤。
- 希望创建不同配置的对象,但避免使用过多的构造函数或参数。
- 需要保证对象在构造过程中是不可变的,即一旦构建完成,就不能再修改。
- 希望提供一种清晰的方式来构建对象,并且可以按顺序设置属性。
- 通过拆分对象的构建过程,可以将共同的构建逻辑抽象出来,提高代码的重用性
二. 实现
1.创建一个Computer类,字段多且可选
public class Computer {
private String cpu; // 必须
private String memory; // 必须
private String hardDisk; // 必须
private String individualGraphicsCard; // 可选
private String individualScreen;
private Computer(Builder builder) {
this.cpu = builder.cpu;
this.memory = builder.memory;
this.hardDisk = builder.hardDisk;
this.individualGraphicsCard = builder.individualGraphicsCard;
this.individualScreen = builder.individualScreen;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", memory='" + memory + '\'' +
", hardDisk='" + hardDisk + '\'' +
", individualGraphicsCard='" + individualGraphicsCard + '\'' +
", individualScreen='" + individualScreen + '\'' +
'}';
}
public static class Builder {
private String cpu; // 必须
private String memory; // 必须
private String hardDisk; // 必须
private String individualGraphicsCard = "INVIDA"; // 可选
private String individualScreen = "LENOVO";
public Builder(String cpu, String memory, String hardDisk) {
this.cpu = cpu;
this.memory = memory;
this.hardDisk = hardDisk;
}
public Builder individualGraphicsCard(String individualGraphicsCard) {
this.individualGraphicsCard = individualGraphicsCard;
return this;
}
public Builder individualScreen(String individualScreen) {
this.individualScreen = individualScreen;
return this;
}
public Computer builder() {
return new Computer(this);
}
}
}
2.测试
public class Main {
public static void main(String[] args) {
Computer computer = new Computer.Builder("INTEL", "M1", "H1")
.individualGraphicsCard("G1")
.individualScreen("S1")
.builder();
System.out.println(computer);
}
}
运行结果:
Computer{cpu='INTEL', memory='M1', hardDisk='H1', individualGraphicsCard='G1', individualScreen='S1'}