[关闭]
@BertLee 2017-08-08T23:04:09.000000Z 字数 1503 阅读 1088

变化多端的建造者模式

序言

  建造者模式可以使客户端不需要知道产品有哪些组件,各组件是怎么生产的,最后是怎么装配组合的,只可以使程序更简洁,灵活。
- 抽象建造者:包括组件构造方法和产品返回方法;产品有多少零件,就有多少build方法。
- 具体建造者:实现产品组件的build方法
- 导演者:提供产品的组合方法
- 产品:具体类,包含组件及其getter,setter方法

建造者模式

建造者模式的结构如下图:





  1. /**
  2. * 具体产品
  3. */
  4. public class Computer {
  5. private String cpu;
  6. private String keybord;
  7. private String mouse;
  8. public String getCpu() {
  9. return cpu;
  10. }
  11. public void setCpu(String cpu) {
  12. this.cpu = cpu;
  13. }
  14. public String getKeybord() {
  15. return keybord;
  16. }
  17. public void setKeybord(String keybord) {
  18. this.keybord = keybord;
  19. }
  20. public String getMouse() {
  21. return mouse;
  22. }
  23. public void setMouse(String mouse) {
  24. this.mouse = mouse;
  25. }
  26. @Override
  27. public String toString() {
  28. return "Computer{" +
  29. "cpu='" + cpu + '\'' +
  30. ", keybord='" + keybord + '\'' +
  31. ", mouse='" + mouse + '\'' +
  32. '}';
  33. }
  34. }
  1. /**
  2. * builder接口
  3. * 1.提供build组件的方法,类似set方法
  4. * 2.提供返回产品的build方法,类似get方法
  5. */
  6. public interface Builder {
  7. public Builder buildMouse(String mouseType);
  8. public Builder buildKeybord(String keybordType);
  9. public Computer build();
  10. }
  1. /**
  2. * 实现builer接口
  3. * 1.提供想要产品的成员变量
  4. * 2.在构造方法中,初始化必需参数
  5. * 3.build组件的方法中,初始化不必须参数
  6. */
  7. public class ComputerBuilder implements Builder{
  8. private Computer computer;
  9. public ComputerBuilder(String cpuType){
  10. computer = new Computer();
  11. computer.setCpu(cpuType);
  12. }
  13. public Builder buildKeybord(String keybordType) {
  14. computer.setKeybord(keybordType);
  15. return this;
  16. }
  17. public Builder buildMouse(String mouseType) {
  18. computer.setMouse(mouseType);
  19. return this;
  20. }
  21. public Computer build() {
  22. return computer;
  23. }
  24. }

  吹牛:建造者模式将产品的构建和组合的职责分割开来,适合创建具有多种约束条件的复杂对象,最简洁的用法是将Director角色去掉,在cient采用链式编程的方法,将其初始化。

后记

  转载时,注明出处是人格的一种体现。
  https://www.zybuluo.com/BertLee/note/843667
  能力有限,如有纰漏,请在评论区指出,老朽虽一把年纪,必当感激涕零,泪如雨下。若有满嘴喷粪撕逼者,一律拉黑、举报,并移交阎王爷处理。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注