资讯专栏INFORMATION COLUMN

JS 设计模式 八(建造者模式)

tanglijun / 3627人阅读

摘要:即建造者模式可以强制实行一种分步骤进行的建造过程。指导类负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类建造者模式优点建造者模式的封装性很好。

建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,由于需求的变化,这个复杂对象的某些部分经常面临着剧烈的变化,一些基本部件不会变。所以需要将变与不变分离。与抽象工厂的区别:在建造者模式里,有个指导者(Director),由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造者模式可以强制实行一种分步骤进行的建造过程。

建造者模式四要素

1.产品类Product:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。
2.抽象建造者类Builder: 将建造的具体过程交与它的子类来实现,这样更容易扩展。
3.建造者类ConcreteBuilder: 组建产品;返回组建好的产品。
4.指导类Director: 负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类

建造者模式优点

1.建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指导者类中对整体而言可以取得比较好的稳定性。
2.建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成。

举例

似乎很抽象。举个例子:前面你创建了一个生产保时捷的工厂,生产一台保时捷911需要的主要部件都一样(引擎,轮子,方向盘...)和流程是不变的,变的是引擎,轮子,控制系统等等部件具体实现,这些部件的生产交由具体的builder去生产。

代码

</>复制代码

  1. //建造者模式
  2. var DP = require("./DesignPattern.js");
  3. function Car() {
  4. var _frame, _engine, _wheel;
  5. this.setFrame = function (val) {
  6. _frame = val;
  7. };
  8. this.setEngine = function (val) {
  9. _engine = val;
  10. };
  11. this.setWheel = function (val) {
  12. _wheel = val;
  13. };
  14. this.getFrame = function () {
  15. return _frame
  16. };
  17. this.getEngine = function () {
  18. return _engine
  19. };
  20. this.getWheel = function () {
  21. return _wheel
  22. };
  23. this.check = function () {
  24. console.log(_frame + "检查完毕");
  25. console.log(_engine + "检查完毕");
  26. console.log(_wheel + "检查完毕");
  27. };
  28. }
  29. //抽象生产者
  30. function Builder() {
  31. DP.Interface(this, ["buildFrame", "buildEngine", "buildWheel", "buildCar"])
  32. }
  33. //指导者,产品生产流程规范
  34. function Director(Builder) {
  35. //传入具体制造者
  36. var _builder = Builder;
  37. this.build = function () {
  38. _builder.buildFrame();
  39. _builder.buildEngine();
  40. _builder.buildWheel();
  41. return _builder.buildCar();
  42. };
  43. }
  44. function Builder911() {
  45. this.__proto__ = new Builder();
  46. var _car = new Car();
  47. this.buildFrame = function () {
  48. console.log("制造911骨架");
  49. _car.setFrame("911骨架");
  50. };
  51. this.buildEngine = function () {
  52. console.log("制造911引擎");
  53. _car.setEngine("911引擎");
  54. };
  55. this.buildWheel = function () {
  56. console.log("制造911轮子");
  57. _car.setWheel("911轮子");
  58. };
  59. this.buildCar = function () {
  60. console.log("911汽车各部组装完毕");
  61. return _car;
  62. };
  63. }
  64. function BuilderCayma() {
  65. this.__proto__ = new Builder();
  66. var _car = new Car();
  67. this.buildFrame = function () {
  68. console.log("制造Cayma骨架");
  69. _car.setFrame("Cayma骨架");
  70. };
  71. this.buildEngine = function () {
  72. console.log("制造Cayma引擎");
  73. _car.setEngine("Cayma引擎");
  74. };
  75. this.buildWheel = function () {
  76. console.log("制造Cayma轮子");
  77. _car.setWheel("Cayma轮子");
  78. };
  79. this.buildCar = function () {
  80. console.log("Cayma汽车各部组装完毕");
  81. return _car;
  82. };
  83. }
  84. var builder911 = new Builder911();
  85. var director911 = new Director(builder911);
  86. var car911 = director911.build();
  87. car911.check();
  88. var builderCayma = new BuilderCayma();
  89. var directorCayma = new Director(builderCayma);
  90. var Cayma = directorCayma.build();
  91. Cayma.check();
适用场景

需要生成的对象具有复杂的内部结构;需要生成的对象内部属性本身相互依赖。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79491.html

相关文章

  • JS 建造模式

    摘要:如何应对这种变化如何提供一种封装机制来隔离出复杂对象的各个部分的变化,从而保持系统中的稳定构建算法不随着需求改变而改变这就是要说的建造者模式。建造者模式,将一个复杂对象的构建层与其表示层相互分离,使得同样的构建过程可以采用不同的表示。 1. 简介 在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着...

    channg 评论0 收藏0
  • js常用设计模式实现(三)建造模式

    摘要:创建型模式创建型模式是对一个类的实例化过程进行了抽象,把对象的创建和对象的使用进行了分离关于创建型模式,已经接近尾声了,还剩下建造者模式和原型模式,这一篇说一说建造者模式建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程 创建型模式 创建型模式是对一个类的实例化过程进行了抽象,把对象的创建和对象的使用进行了分离 关于创建型模式,已经接近尾声了,还剩下建造者模式和原型...

    Apollo 评论0 收藏0
  • 一天一个设计模式JS实现——建造模式

    摘要:参考文章设计模式之建造者模式一什么是建造者模式建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 参考文章:java设计模式之建造者模式 一、什么是建造者模式建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓...

    boredream 评论0 收藏0
  • 细谈JavaScript中的一些设计模式

    摘要:注意事项声明函数时候处理业务逻辑区分和单例的区别,配合单例实现初始化构造函数大写字母开头推荐注意的成本。简单工厂模式使用一个类通常为单体来生成实例。 @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 一直对设计模式不太懂,花了一下午加一晚上的时间,好好的看了看各种设计模式,并总结了一下。 设计模式简介 设计模式概念解读 设计模式的发展与在JavaScript中的应用 ...

    30e8336b8229 评论0 收藏0
  • 深入理解建造模式 ——组装复杂的实例

    摘要:而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。最后通过一个套餐实例,介绍了建造者模式在实例中的基本使用手段。 历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 无论是在现实世界中还是在软件...

    sanyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<