描述
角色
- 产品角色(Product):Phone
- 抽象建造者(Builder):AbstracPhoneBuilder
- 具体建造者(Concrete Builder):PhoneBuilder
- 创建的东西细节复杂,还必须暴露给使用者。屏蔽过程而不屏蔽细节
代码实现
@Data
public class Phone {
private String name;
private String cpu;
private String price;
}
public abstract class PhoneBuilder {
Phone phone;
private String name;
private String cpu;
private String price;
abstract PhoneBuilder price(String price);
abstract PhoneBuilder name(String name);
abstract PhoneBuilder cpu(String cpu);
abstract Phone createPhone();
abstract PhoneBuilder builder();
}
public class XiaoMiPhoneBuilder extends PhoneBuilder {
@Override
PhoneBuilder price(String price) {
this.phone.setPrice(price);
return this;
}
@Override
PhoneBuilder name(String name) {
this.phone.setName(name);
return this;
}
@Override
PhoneBuilder cpu(String cpu) {
this.phone.setCpu(cpu);
return this;
}
@Override
Phone createPhone() {
return phone;
}
@Override
PhoneBuilder builder() {
this.phone = new Phone();
return this;
}
}
测试
public class PhoneTest {
public static void main(String[] args) {
XiaoMiPhoneBuilder xiaoMiPhoneBuilder = new XiaoMiPhoneBuilder();
Phone phone = xiaoMiPhoneBuilder.builder().price("1").name("2").cpu("3").createPhone();
System.out.println(phone);
}
}
//输出结果 Phone(name=2, cpu=3, price=1)
应用场景
什么场景用到?
- StringBuilder:append(); 给谁append呢?
- Swagger-ApiBuilder:
- 快速实现。Lombok-Builder模式 ……
编写代码的时候使用到了设计模式。类+模式
- xxxFactory
xxxTemplate - xxxBuilder
- xxxFacede
- ……