描述

image.png

角色

  • 产品角色(Product):Phone
  • 抽象建造者(Builder):AbstracPhoneBuilder
  • 具体建造者(Concrete Builder):PhoneBuilder
  • 创建的东西细节复杂,还必须暴露给使用者。屏蔽过程而不屏蔽细节

代码实现

  1. @Data
  2. public class Phone {
  3. private String name;
  4. private String cpu;
  5. private String price;
  6. }
  1. public abstract class PhoneBuilder {
  2. Phone phone;
  3. private String name;
  4. private String cpu;
  5. private String price;
  6. abstract PhoneBuilder price(String price);
  7. abstract PhoneBuilder name(String name);
  8. abstract PhoneBuilder cpu(String cpu);
  9. abstract Phone createPhone();
  10. abstract PhoneBuilder builder();
  11. }
  1. public class XiaoMiPhoneBuilder extends PhoneBuilder {
  2. @Override
  3. PhoneBuilder price(String price) {
  4. this.phone.setPrice(price);
  5. return this;
  6. }
  7. @Override
  8. PhoneBuilder name(String name) {
  9. this.phone.setName(name);
  10. return this;
  11. }
  12. @Override
  13. PhoneBuilder cpu(String cpu) {
  14. this.phone.setCpu(cpu);
  15. return this;
  16. }
  17. @Override
  18. Phone createPhone() {
  19. return phone;
  20. }
  21. @Override
  22. PhoneBuilder builder() {
  23. this.phone = new Phone();
  24. return this;
  25. }
  26. }

测试

  1. public class PhoneTest {
  2. public static void main(String[] args) {
  3. XiaoMiPhoneBuilder xiaoMiPhoneBuilder = new XiaoMiPhoneBuilder();
  4. Phone phone = xiaoMiPhoneBuilder.builder().price("1").name("2").cpu("3").createPhone();
  5. System.out.println(phone);
  6. }
  7. }
  8. //输出结果 Phone(name=2, cpu=3, price=1)

应用场景

什么场景用到?

  • StringBuilder:append(); 给谁append呢?
  • Swagger-ApiBuilder:
  • 快速实现。Lombok-Builder模式 ……

编写代码的时候使用到了设计模式。类+模式

  • xxxFactory
    xxxTemplate
  • xxxBuilder
  • xxxFacede
  • ……