1.最基本的模式
由四部分组成:
- 1.Builder
- 2.Director
- 3.ConcreateBuilder
- 4.Product
Product就是一个产品的模型,java中的javabean。ConcreateBuilder 就是为javabean设置参数。Builder就是把设置参数的接口抽象出来。Director就是调用ConcreateBuilder的方法。
我们举个例子
假如我们要安装一台电脑,Product就是一个电脑的模型。把设置参数的接口抽象出来。让ConcreateBuilder去实现接口并且设置参数。Director依次去调用设置参数的方法。
public class Computer {
private String cpu;
private String hd;
private String mainBoard;
//省略get set 方法
public interface IBuildComputer {
void setMainboard();
void setCpu();
void setHD();
Computer getComputer();
}
public class CreateComputer implements IBuildComputer {
Computer computer ;
public CreateComputer(){
computer = new Computer();
}
@Override
public void setMainboard() {
computer.setMainBoard("安装主板");
}
@Override
public void setCpu() {
computer.setCpu("安装cpu");
}
@Override
public void setHD() {
computer.setHd("安装硬盘");
}
@Override
public Computer getComputer() {
return computer;
}
}
public class Director {
public Computer builder(IBuildComputer iBuildComputer){
iBuildComputer.setCpu();
iBuildComputer.setHD();
iBuildComputer.setMainboard();
return iBuildComputer.
测试类
public class ComputerTest {
public static void main(String[] args){
Director director = new Director();
Computer builder = director.builder(new CreateComputer());
System.out.print(builder.getCpu()+builder.getHd()+builder.getMainBoard());
}
}
2.上面是最基础的模式,现在升级了一下,通过静态内部类实现零件的无序话构造。
public class HighComputer {
public String cpu;
public String hd;
public String mainBoard;
public HighComputer(String cpu, String hd, String mainBoard){
this.cpu = cpu;
this.hd = hd;
this.mainBoard = mainBoard;
}
static class Builder {
private String cpu;
private String hd;
private String mainBoard;
public Builder setCpu(String cpu){
this.cpu = cpu;
return this;
}
public Builder setHD(String hd){
this.hd = hd;
return this;
}
public Builder setMainBoard(String mainBoard){
this.mainBoard = mainBoard;
return this;
}
public HighComputer build(){
return new HighComputer(cpu,hd,mainBoard);
}
}
}
测试类
HighComputer computer = new HighComputer.Builder().setCpu("i7")
.setHD("1G固态")
.setMainBoard("三无产品").build();
System.out.print(computer.cpu+computer.hd+computer.mainBoard);
优点:隐藏具体建造细节,只需要简单配置参数就可以拿到产品。创建过程和产品本身解耦,易于维护和拓展,创建新的创造者无需修改产品,符合“开闭原则”。
缺点:1.建造者模式生产的产品,适合共同点较多的产品,使用范围有局限性。2.如果产品内部变化复杂,会创建不同的创建者,是系统庞大。