定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道

类型

创建型

适用场景

如果一个对象有非常复杂的内部结构(很多属性)
想把复杂对象的创建和使用分离

优缺点

优点

封装性好,创建和使用分离
扩展性好、建造类之间独立、一定程度上解耦

缺点

产生多余的 Builder对象产品内部发生变化
建造者都要修改,成本较大

代码分析

常见的连续调用
image.png

代码实现,构造静态内部类,调用后返回自身
image.png

实现代码

  1. package site.gaox.design.patterns.creational.builder.V2;
  2. /**
  3. * @Description: <p> </p>
  4. * @Auther: gaox·Eric
  5. * @Date: 2019/3/18 15:16
  6. */
  7. public class Computer {
  8. private String CPU;
  9. private String memory;
  10. private String SSD;
  11. private String power;
  12. private String mainboard;
  13. public Computer(ComputerBuilder computerBuilder) {
  14. this.CPU = computerBuilder.CPU;
  15. this.memory = computerBuilder.memory;
  16. this.SSD = computerBuilder.SSD;
  17. this.power = computerBuilder.power;
  18. this.mainboard = computerBuilder.mainboard;
  19. }
  20. @Override
  21. public String toString() {
  22. return "Computer{" +
  23. "CPU='" + CPU + '\'' +
  24. ", memory='" + memory + '\'' +
  25. ", SSD='" + SSD + '\'' +
  26. ", power='" + power + '\'' +
  27. ", mainboard='" + mainboard + '\'' +
  28. '}';
  29. }
  30. public static class ComputerBuilder {
  31. private String CPU;
  32. private String memory;
  33. private String SSD;
  34. private String power;
  35. private String mainboard;
  36. /**
  37. * 还可以做默认值设置
  38. * @param CPUName
  39. * @return
  40. */
  41. public ComputerBuilder buildCPU(String CPUName) {
  42. this.CPU = CPUName;
  43. return this;
  44. }
  45. public ComputerBuilder buildMemory(String memoryName) {
  46. this.memory = memoryName;
  47. return this;
  48. }
  49. public ComputerBuilder buildSSD(String SSDName) {
  50. this.SSD = SSDName;
  51. return this;
  52. }
  53. public ComputerBuilder buildPower(String PowerName) {
  54. this.power = power;
  55. return this;
  56. }
  57. public ComputerBuilder buildMainboard(String mainboardName) {
  58. this.mainboard = mainboardName;
  59. return this;
  60. }
  61. //最后调用本方法也可以返回这个对象
  62. public Computer build() {
  63. return new Computer(this);
  64. }
  65. }
  66. }