特点
建造者模式也叫创建者模式,属于创建型设计模式。旨在更为灵活的创建对象。该模式有一个Builder类,主要提供对象的构建过程。与工厂模式最大的区别在于工厂模式是封装了对象的创建过程,提供最终的对象,而建造者模式则更为灵活的将建造过程提供给使用者,让其自由设定对象创建过程和属性。
代码
public class Phone {
private String cpu;
private String battery;
private String model;
private String mem;
private String disk;
private String screen;
public Phone(Builder builder) {
this.cpu = builder.cpu;
this.battery = builder.battery;
this.model = builder.model;
this.mem = builder.mem;
this.disk = builder.disk;
this.screen = builder.screen;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\'' +
", battery='" + battery + '\'' +
", model='" + model + '\'' +
", mem='" + mem + '\'' +
", disk='" + disk + '\'' +
", screen='" + screen + '\'' +
'}';
}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private String cpu;
private String battery;
private String model;
private String mem;
private String disk;
private String screen;
public Builder cpu(String cpu){
this.cpu = cpu;
return this;
}
public Builder battery(String battery){
this.battery = battery;
return this;
}
public Builder model(String model){
this.model = model;
return this;
}
public Builder mem(String mem){
this.mem = mem;
return this;
}
public Builder disk(String disk){
this.disk = disk;
return this;
}
public Builder screen(String screen){
this.screen = screen;
return this;
}
public Phone build(){
return new Phone(this);
}
}
}
测试 :
@Test
public void testBuilder(){
Phone phone = Phone.builder()
.cpu("骁龙")
.battery("4000mA")
.disk("120GB")
.mem("16GB")
.model("pro")
.screen("5点触控")
.build();
log.info("创建的对象: {}",phone);
}
日志显示:
2021-03-10 10:04:11.622 INFO 76400 --- [ main] org.example.singleton.BuilderTest : 创建的对象: Phone{cpu='骁龙', battery='4000mA', model='pro', mem='16GB', disk='120GB', screen='5点触控'}
在java项目中,通常会使用插件来标记,例如:lombok
插件中的@Builder
注解:
@Builder
public class Phone {
private String cpu;
private String battery;
private String model;
private String mem;
private String disk;
private String screen;
}