假设一个场景,可以在线的选取玩偶的一些零件,组装成玩偶,需要组装 头部 ,腹部,下肢

1.普通java对象

  1. package com.mkb.creational.builder;
  2. /**
  3. * @author meikb
  4. * @desc 比如创建机器角色 头 身体 腿
  5. * 正常情况是new 一个对象 然后一个个设置属性
  6. *
  7. *
  8. * @date 2020-05-08 15:26
  9. */
  10. public class Actor {
  11. //=============头==============
  12. private String eye;//眼睛
  13. private String ear;//耳朵
  14. private String mouth; //嘴巴
  15. private String nose; //鼻子
  16. private String eyebrow; //眉毛
  17. //=============身体==============
  18. private String body;
  19. private String arm; //胳膊
  20. //=============腿==============
  21. private String leg; //腿
  22. private String foot; //脚
  23. private String shoes; //鞋
  24. public String getEye() {
  25. return eye;
  26. }
  27. public void setEye(String eye) {
  28. this.eye = eye;
  29. }
  30. public String getEar() {
  31. return ear;
  32. }
  33. public void setEar(String ear) {
  34. this.ear = ear;
  35. }
  36. public String getMouth() {
  37. return mouth;
  38. }
  39. public void setMouth(String mouth) {
  40. this.mouth = mouth;
  41. }
  42. public String getNose() {
  43. return nose;
  44. }
  45. public void setNose(String nose) {
  46. this.nose = nose;
  47. }
  48. public String getEyebrow() {
  49. return eyebrow;
  50. }
  51. public void setEyebrow(String eyebrow) {
  52. this.eyebrow = eyebrow;
  53. }
  54. public String getBody() {
  55. return body;
  56. }
  57. public void setBody(String body) {
  58. this.body = body;
  59. }
  60. public String getArm() {
  61. return arm;
  62. }
  63. public void setArm(String arm) {
  64. this.arm = arm;
  65. }
  66. public String getLeg() {
  67. return leg;
  68. }
  69. public void setLeg(String leg) {
  70. this.leg = leg;
  71. }
  72. public String getFoot() {
  73. return foot;
  74. }
  75. public void setFoot(String foot) {
  76. this.foot = foot;
  77. }
  78. public String getShoes() {
  79. return shoes;
  80. }
  81. public void setShoes(String shoes) {
  82. this.shoes = shoes;
  83. }
  84. @Override
  85. public String toString() {
  86. return "Actor{" +
  87. "eye='" + eye + '\'' +
  88. ", ear='" + ear + '\'' +
  89. ", mouth='" + mouth + '\'' +
  90. ", nose='" + nose + '\'' +
  91. ", eyebrow='" + eyebrow + '\'' +
  92. ", body='" + body + '\'' +
  93. ", arm='" + arm + '\'' +
  94. ", leg='" + leg + '\'' +
  95. ", foot='" + foot + '\'' +
  96. ", shoes='" + shoes + '\'' +
  97. '}';
  98. }
  99. }

2 .构建器 抽象类

  1. /**
  2. * @author meikb
  3. * @desc 构建者肯定与要拥有构建对象
  4. * @date 2020-05-08 15:34
  5. */
  6. public abstract class ActorBuilder {
  7. //要拥有构建对象
  8. Actor actor = new Actor();
  9. public abstract void buildHead();
  10. public abstract void buildBody();
  11. public abstract void buildLegs();
  12. //把构建对象返回
  13. public Actor getActor() {
  14. return actor;
  15. }
  16. }

3.具体的构建器1

  1. /**
  2. * @author meikb
  3. * @desc
  4. * @date 2020-05-08 15:34
  5. */
  6. public class AngelBuilder extends ActorBuilder{
  7. @Override
  8. public void buildHead() {
  9. actor.setNose("小鼻子");
  10. actor.setEar("小耳朵");
  11. actor.setEye("大眼睛");
  12. actor.setEyebrow("柳叶眉");
  13. actor.setMouth("小嘴巴");
  14. System.out.println("开始安装头部");
  15. }
  16. @Override
  17. public void buildBody() {
  18. actor.setBody("细腰");
  19. actor.setArm("细胳膊");
  20. System.out.println("开始安装身体");
  21. }
  22. @Override
  23. public void buildLegs() {
  24. actor.setLeg("大长腿");
  25. actor.setFoot("小脚");
  26. actor.setShoes("水晶鞋");
  27. System.out.println("开始安装下肢");
  28. }
  29. }

4.具体构建器2

  1. /**
  2. * @author meikb
  3. * @desc
  4. * @date 2020-05-08 15:34
  5. */
  6. public class HeroBuilder extends ActorBuilder{
  7. @Override
  8. public void buildHead() {
  9. actor.setNose("大鼻子");
  10. actor.setEar("大耳朵");
  11. actor.setEye("大眼睛");
  12. actor.setEyebrow("浓眉");
  13. actor.setMouth("大嘴巴");
  14. System.out.println("开始安装头部");
  15. }
  16. @Override
  17. public void buildBody() {
  18. actor.setBody("大身板");
  19. actor.setArm("粗胳膊");
  20. System.out.println("开始安装身体");
  21. }
  22. @Override
  23. public void buildLegs() {
  24. actor.setLeg("长腿");
  25. actor.setFoot("大脚");
  26. actor.setShoes("球鞋");
  27. System.out.println("开始安装下肢");
  28. }
  29. }

5.构建者持有构建器

  1. /**
  2. * @author meikb
  3. * @desc 构建者 持有建造类
  4. * @date 2020-05-08 16:57
  5. */
  6. public class Director {
  7. public Actor construct(ActorBuilder actorBuilder){
  8. actorBuilder.buildHead();
  9. actorBuilder.buildBody();
  10. actorBuilder.buildLegs();
  11. System.out.println("开始拼接");
  12. return actorBuilder.actor;
  13. }
  14. }

6.主函数

  1. /**
  2. * @author meikb
  3. * @desc
  4. * @date 2020-05-08 16:59
  5. */
  6. public class ActorMain {
  7. public static void main(String[] args) {
  8. Director director = new Director();
  9. ActorBuilder heroBuilder = new HeroBuilder();
  10. Actor actor1 = director.construct(heroBuilder);
  11. System.out.println(actor1.toString());
  12. ActorBuilder angleBulider = new AngelBuilder();
  13. Actor actor2 = director.construct(angleBulider);
  14. System.out.println(actor2.toString());
  15. // bulidHero();
  16. }
  17. public static void bulidHero(){
  18. Actor hero = new Actor();
  19. buildHeroHead(hero);
  20. buildHeroBody(hero);
  21. buildHeroLegs(hero);
  22. System.out.println("开始拼接");
  23. System.out.println(hero.toString());
  24. }
  25. private static void buildHeroLegs(Actor hero) {
  26. hero.setLeg("长腿");
  27. hero.setFoot("大脚");
  28. hero.setShoes("球鞋");
  29. System.out.println("开始安装下肢");
  30. }
  31. private static void buildHeroBody(Actor hero) {
  32. hero.setBody("大身板");
  33. hero.setArm("粗胳膊");
  34. System.out.println("开始安装身体");
  35. }
  36. private static void buildHeroHead(Actor hero) {
  37. hero.setNose("大鼻子");
  38. hero.setEar("大耳朵");
  39. hero.setEye("大眼睛");
  40. hero.setEyebrow("浓眉");
  41. hero.setMouth("大嘴巴");
  42. System.out.println("开始安装头部");
  43. }
  44. }