设计模式(4)[JS版]-JavaScript如何实现建造者模式?

目录

1 什么是建造者模式

2 建造者模式的作用和注意事项

3.代码实现

4 总结


1 什么是建造者模式

 

建造者模式(Builder)可以将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户只需要指定需要建造的类型就可以得到所需要的东西,而具体建造的过程和细节不需要知道。建造者模式实际,就是一个指挥者,一个建造者和一个用户。用户调用指挥者,指挥者调用具体建造者工作,建造者建造出具体的东西给用户。

建造者模式我们在代码中经常用到,比如Jquery中的ajax请求:


  
  1. //1 用户发送一个请求
  2. //2 $.ajax建造者模式(指挥者)
  3. //3 具体实现 (建造者)
  4. $.ajax({
  5. url:'www.albertyy.com',
  6. success:function(argument){
  7. }
  8. });

2 建造者模式的作用和注意事项

Builder模式允许客户端仅通过指定类型和内容来构造一个复杂的对象。构造细节完全对客户端隐藏。使用Builder的最常见的作用是简化创建复杂对象的客户端代码。客户端可以指导建造者创建,而不需要知道实际工作是如何完成的。

模式作用:

1 分步创建一个复杂的对象。

2 解耦封装过程和具体创建的组件。

3 无需关心组件如何组装。

注意事项:

1 要有一个稳定的算法进行支持。

2 加工工艺是暴露的。

3.代码实现

 

建造者模式的参与者主要有:product产品类、Builder建造者类、Director指挥者类。由于JavaScript不支持抽象类,因此未使用AbstractBuilder。在下面的代码中,有一个Shop(Director )和两个Builder建造者类:CarBuilder和TruckBuilder。Shop的构造方法接受一个Builder实例,然后执行一系列组装步骤:step1和step2。Builder的get方法返回新组装的产品(Car对象和Truck对象)。客户通过向商店提供不同的构建器,可以控制实际对象的构建过程。

主要的流程是:

  1. 客户提出需求。

  2. 指挥者根据用户需求,指挥建造者去完成需求的各个部分。

  3. 建造者完成相应的部分。


  
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. </body>
  9. <script>
  10. //商店:Director指挥者类
  11. function Shop() {
  12. this.construct = function(builder) {
  13. builder.step1();
  14. builder.step2();
  15. return builder.get();
  16. }
  17. }
  18. //汽车制造商:建造者类
  19. function CarBuilder() {
  20. this.car = null;
  21. this.step1 = function() {
  22. this.car = new Car();
  23. };
  24. this.step2 = function() {
  25. this.car.addParts();
  26. };
  27. this.get = function() {
  28. return this.car;
  29. };
  30. }
  31. //卡车制造商:建造者类
  32. function TruckBuilder() {
  33. this.truck = null;
  34. this.step1 = function() {
  35. this.truck = new Truck();
  36. };
  37. this.step2 = function() {
  38. this.truck.addParts();
  39. };
  40. this.get = function() {
  41. return this.truck;
  42. };
  43. }
  44. //产品类:car
  45. function Car() {
  46. this.doors = 0;
  47. this.addParts = function() {
  48. this.doors = 4;
  49. };
  50. this.say = function() {
  51. log.add("我是一辆" + this.doors + "门汽车");
  52. };
  53. }
  54. //产品类:Truck
  55. function Truck() {
  56. this.doors = 0;
  57. this.addParts = function() {
  58. this.doors = 2;
  59. };
  60. this.say = function() {
  61. log.add("我是一辆" + this.doors + "门卡车");
  62. };
  63. }
  64. // 日志打印
  65. var log = (function() {
  66. var log = "";
  67. return {
  68. add: function(msg) {
  69. log += msg + "\n";
  70. },
  71. show: function() {
  72. alert(log);
  73. log = "";
  74. }
  75. }
  76. })();
  77. //运行程序
  78. function run() {
  79. var shop = new Shop();
  80. var carBuilder = new CarBuilder();
  81. var truckBuilder = new TruckBuilder();
  82. //客户通过向商店提供不同的汽车构建器,得到不同的汽车
  83. var car = shop.construct(carBuilder);
  84. var truck = shop.construct(truckBuilder);
  85. car.say();
  86. truck.say();
  87. log.show();
  88. }
  89. run();
  90. </script>
  91. </html>

4 总结

建造者模式主要用于“分布构建一个复杂的对象”,它很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,并且建造者模式解耦了对象本身与构建过程,使得我们不用关心具体的建造过程。

通过以上对建造者模式的学习,你应该掌握了以下知识:

1 知道什么是建造者模式。

2 掌握建造者模式的作用和使用注意事项。

3 掌握建造者设计模式代码编写。

你可以使用这些技巧来改善一下你曾经的代码。如果想继续提高,欢迎关注我写的其他JavaScript设计模式的系列文章。

文章来源: albertyang.blog.csdn.net,作者:Albert Yang,版权归原作者所有,如需转载,请联系作者。

原文链接:albertyang.blog.csdn.net/article/details/107498200

(完)