核心思想
- 抽取共同的行为,允许使用者指定复杂对象的类型和内容,不需要了解内部的构建细节
- 使用多个简单的行为构建一个复杂的对象,将对象的构建过程和它的表示分离,同样的构建过程可以创建不同的表示

优缺点
优点
- 使用者不需要知道具体内部组成细节,产品本身与创建过程解耦
- 具体建造者每个都是独立的,相互无关,不同的是控制产品的创建过程
- 新增具体建造者不需要修改原来类的代码
缺点
- 建造者所创建的产品一般要具有比较多的共同点,差异大的话不建议使用
代码示例
指挥者代码
public class Director {public Computer createComputer(Builder builder){builder.buildMemory();builder.buildCpu();builder.buildMainboard();builder.buildDisk();builder.buildPower();return builder.getComputer();}
}
抽象建造者
public interface Builder {void buildCpu();void buildMainboard();void buildDisk();void buildPower();void buildMemory();Computer getComputer();
}
具体建造者
public class HighComputerBuilder implements Builder{private Computer computer = new Computer();@Overridepublic void buildCpu() {computer.setCpu("高配 CPU");}@Overridepublic void buildMainboard() {computer.setMainboard("高配 主板");}@Overridepublic void buildDisk() {computer.setDisk("高配 磁盘");}@Overridepublic void buildPower() {computer.setPower("高配 电源");}@Overridepublic void buildMemory() {computer.setMemory("高配 内存");}@Overridepublic Computer getComputer() {return computer;}
}
public class LowComputerBuilder implements Builder{private Computer computer = new Computer();@Overridepublic void buildCpu() {computer.setCpu("低配 CPU");}@Overridepublic void buildMainboard() {computer.setMainboard("低配 主板");}@Overridepublic void buildDisk() {computer.setDisk("低配 磁盘");}@Overridepublic void buildPower() {computer.setPower("低配 电源");}@Overridepublic void buildMemory() {computer.setMemory("低配 内存");}@Overridepublic Computer getComputer() {return computer;}
}
产品
public class Computer {private String cpu;private String memory;private String mainboard;private String disk;private String power;public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}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;}public String getDisk() {return disk;}public void setDisk(String disk) {this.disk = disk;}public String getPower() {return power;}public void setPower(String power) {this.power = power;}@Overridepublic String toString() {return "Computer{" +"cpu='" + cpu + '\'' +", memory='" + memory + '\'' +", mainboard='" + mainboard + '\'' +", disk='" + disk + '\'' +", power='" + power + '\'' +'}';}
}
测试
public class AppRun {public static void main(String[] args) {Director director = new Director();Computer computer = director.createComputer(new HighComputerBuilder());System.out.println(computer);}
}

public class AppRun {public static void main(String[] args) {Director director = new Director();Computer computer = director.createComputer(new LowComputerBuilder());System.out.println(computer);}
}
