1.为什么要使用建造者模式
假如一个类存在很多个属性,按照原来的方式,需要提供一个很长的构造函数,里面包含所有要使用的属性,代码的可读性极差。出现这样的问题,可以首先想到建造者模式来创建这样的对象。
2.实例
// 主机
public class MainEngine {
private String CPU;
private String mainBoard;
private String powerSupply;
private String memoryBank;
private String hardDisk;
private String networkCard;
public static class Builder {
private MainEngine mainEngine = new MainEngine();
public Builder CPU(String CPU) {
mainEngine.CPU = CPU;
return this; // 关键返回Builder对象
}
public Builder mainBoard(String mainBoard) {
mainEngine.mainBoard = mainBoard;
return this;
}
public Builder powerSupply(String powerSupply) {
mainEngine.powerSupply = powerSupply;
return this;
}
public Builder memoryBank(String memoryBank) {
mainEngine.memoryBank = memoryBank;
return this;
}
public Builder hardDisk(String hardDisk) {
mainEngine.hardDisk = hardDisk;
return this;
}
public Builder networkCard(String networkCard) {
mainEngine.networkCard = networkCard;
return this;
}
public MainEngine build() {
return mainEngine;
}
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
// 测试代码
public static void main(String[] args) {
MainEngine mainEngine = new Builder()
.CPU("CPU")
.hardDisk("hardDisk")
.mainBoard("mainBoard")
.memoryBank("memoryBank")
.networkCard("networkCard")
.powerSupply("powerSupply").build();
System.out.println(mainEngine);
}
}
3.创建复杂属性对象新方法
public class MainEngine {
private String CPU;
private String mainBoard;
private String powerSupply;
private String memoryBank;
private String hardDisk;
private String networkCard;
public MainEngine CPU(String CPU) {
this.CPU = CPU;
return this;
}
public MainEngine hardDisk(String hardDisk) {
this.hardDisk = hardDisk;
return this;
}
public MainEngine mainBoard(String mainBoard) {
this.mainBoard = mainBoard;
return this;
}
public MainEngine memoryBank(String memoryBank) {
this.memoryBank = memoryBank;
return this;
}
public MainEngine networkCard(String networkCard) {
this.networkCard = networkCard;
return this;
}
public MainEngine powerSupply(String powerSupply) {
this.powerSupply = powerSupply;
return this;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public static void main(String[] args) {
MainEngine mainEngine = new MainEngine()
.CPU("CPU")
.hardDisk("hardDisk")
.mainBoard("mainBoard")
.memoryBank("memoryBank")
.networkCard("networkCard")
.powerSupply("powerSupply");
System.out.println(mainEngine);
}
}