一、实例举证
1.组装一台电脑
2.组装电脑的配件一般有:CPU、主板、内存、硬盘、光驱、显示器、机箱、电源、显卡、键盘和鼠标,为了简化代码,实例中简化为3样,即CPU、内存、显示器;
二、代码实例
//产品实体类
public class Computer{
private String cpu;
private String memory;
private String monitor;
public void setCpu(String cpu){
this.cpu = cpu;
}
public void setMemory(String memory){
this.memory = memory;
}
public void setMonitor(String monitor){
this.monitor = monitor;
}
}
//抽象建造者
public abstract class Builder{
public abstract Builder setCpu(String cpu);
public abstract Builder setMemory(String memory);
public abstract Builder setMonitor(String monitor);
public abstract Computer getComputer();
}
//具体建造者
public class ComputerBuilder extends Builder{
private Computer computer = new Computer();
public Builder setCpu(String cpu){
computer.setCpu(cpu);
return this;
}
public Builder setMemory(String memory){
computer.setMemory(memory);
return this;
}
public Builder setMonitor(String monitor){
computer.setMonitor(monitor);
return this;
}
public Computer getComputer(){
return computer;
}
}
//导演类,组装
public class Director{
public static Computer getComputerA(){
Builder builder = new ComputerBuilder();
builder.setCpu("Intel i3-4170")
.setMemory("4GB (1X4GB) DDR3 1600MHz SDRAM ")
.setMonitor("21.5寸");
return builder.getComputer();
}
public static Computer getComputerB(){
Builder builder = new ComputerBuilder();
builder.setCpu("Intel i3-4170")
.setMemory("4GB (1X4GB) DDR3 1600MHz SDRAM ")
.setMonitor("14寸");
return builder.getComputer();
}
}
//客户端类
public class Client {
public static void main(String[] args) {
Director.getComputer().dump();
}
}
三、优点
1.产品类和建造者都比较稳定,把易变化的部分封装到导演类中
2.需求扩展时,可以实现一个新的建造者,无需改动其他类
四,建造者模式和工厂模式的区别
工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。