Extensão de modo
Além dos objetivos acima, o modo builder também possui um método comumente usado no desenvolvimento.
Ou seja, quando um construtor de classe precisa passar muitos parâmetros, se uma instância dessa classe for criada, a legibilidade do código será muito pobre e é fácil introduzir erros .
Neste ponto, você pode usar o modo de construtor para reconstrução.
O código antes da reconstrução é o seguinte:
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
public Phone(String cpu, String screen, String memory, String mainboard) {
this.cpu = cpu;
this.screen = screen;
this.memory = memory;
this.mainboard = mainboard;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
this.mainboard = mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
", mainboard='" + mainboard + '\'' +
'}';
}
}
public class Client {
public static void main(String[] args) {
//构建Phone对象
Phone phone = new Phone("intel","三星屏幕","金士顿","华硕");
System.out.println(phone);
}
}
O objeto Phone é construído no código do cliente acima e quatro parâmetros são passados. E se houver mais parâmetros?
A legibilidade do código e o custo de uso são relativamente altos.
Código refatorado:
Phone.java
package com.itheima.pattern.builder.demo2;
/**
* @version v1.0
* @ClassName: Phone
* @Description: 手机类
* @Author: dym
*/
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
//私有构造方法
private Phone(Builder builder) {
this.cpu = builder.cpu;
this.screen = builder.screen;
this.memory = builder.memory;
this.mainboard = builder.mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", screen='" + screen + '\'' +
", memory='" + memory + '\'' +
", mainboard='" + mainboard + '\'' +
'}';
}
public static final class Builder {
private String cpu;
private String screen;
private String memory;
private String mainboard;
public Builder cpu(String cpu) {
this.cpu = cpu;
return this;
}
public Builder screen(String screen) {
this.screen = screen;
return this;
}
public Builder memory(String memory) {
this.memory = memory;
return this;
}
public Builder mainboard(String mainboard) {
this.mainboard = mainboard;
return this;
}
//使用构建者创建Phone对象
public Phone build() {
return new Phone(this);
}
}
}
Client.java
package com.itheima.pattern.builder.demo2;
/**
* @version v1.0
* @ClassName: Client
* @Description: TODO(一句话描述该类的功能)
* @Author: dym
*/
public class Client {
public static void main(String[] args) {
//创建手机对象 通过构建者对象获取手机对象
Phone phone = new Phone.Builder()
.cpu("intel")
.screen("三星屏幕")
.memory("金士顿内存条")
.mainboard("华硕主板")
.build();
System.out.println(phone);
}
}