Builder模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和 Builder模式,相对于工厂模式会产出一个完整的产品, Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分,直白来说,就是使用多个简单的对象一步一步构建成一个复杂的对象

  • 例子:
    使用构建者设计模式来生产 computer

  • 主要步骤:

  1. 将需要构建的目标类分成多个部件(电脑可以分为主机、显示器、键盘、音箱等部件);
  2. 创建构建类;
  3. 依次创建部件;
  4. 将部件组装成目标对象

1.定义

computer

  1. public class Computer {
  2. private String displayer;
  3. private String mainUnit;
  4. private String mouse;
  5. private String keyboard;
  6. public String getDisplayer() {
  7. return displayer;
  8. }
  9. public void setDisplayer(String displayer) {
  10. this.displayer = displayer;
  11. }
  12. public String getMainUnit() {
  13. return mainUnit;
  14. }
  15. public void setMainUnit(String mainUnit) {
  16. this.mainUnit = mainUnit;
  17. }
  18. public String getMouse() {
  19. return mouse;
  20. }
  21. public void setMouse(String mouse) {
  22. this.mouse = mouse;
  23. }
  24. public String getKeyboard() {
  25. return keyboard;
  26. }
  27. public void setKeyboard(String keyboard) {
  28. this.keyboard = keyboard;
  29. }
  30. @Override
  31. public String toString() {};
  32. }

ComputerBuilder

  1. public static class ComputerBuilder{
  2. private ComputerBuilder target =new ComputerBuilder();
  3. public Builder installDisplayer(String displayer){
  4. target.setDisplayer(displayer);
  5. return this;
  6. }
  7. public Builder installMainUnit(String mainUnit){
  8. target.setMainUnit(mainUnit);
  9. return this;
  10. }
  11. public Builder installMouse(String mouse){
  12. target.setMouse(mouse);
  13. return this;
  14. }
  15. public Builder installKeybord(String keyboard){
  16. target.setKeyboard(keyboard);
  17. return this;
  18. }
  19. public ComputerBuilder build(){
  20. return target;
  21. }
  22. }

2.调用

  1. public static void main(String[] args) {
  2. ComputerBuilder computerBuilder = new ComputerBuilder();
  3. computerBuilder.installDisplayer("显示器");
  4. computerBuilder.installMainUnit("主机");
  5. computerBuilder.installKeybord("键盘");
  6. computerBuilder.installMouse("鼠标");
  7. Computer computer = computerBuilder.Builder();
  8. System.out.println(computer);
  9. }