介绍

在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。

建造者模式可以将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户就需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

正文

这个模式相对来说比较简单,先上代码,然后再解释

function getBeerById(id, callback) {// 使用ID来请求数据,然后返回数据.    asyncRequest('GET', 'beer.uri?id=' + id, function (resp) {// callback调用 response        callback(resp.responseText);    });}

var el = document.querySelector('#test');el.addEventListener('click', getBeerByIdBridge, false);

function getBeerByIdBridge(e) {    getBeerById(this.id, function (beer) {        console.log('Requested Beer: ' + beer);    });}

根据建造者的定义,表相即是回调,也就是说获取数据以后如何显示和处理取决于回调函数,相应地回调函数在处理数据的时候不需要关注是如何获取数据的,同样的例子也可以在jquery的ajax方法里看到,有很多回调函数(比如success, error回调等),主要目的就是职责分离。

同样再来一个jQuery的例子:

$('<div class= "foo"> bar </div>');

我们只需要传入要生成的HTML字符,而不需要关系具体的HTML对象是如何生产的。

总结

建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化,其优点是:建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活,并且建造者模式解耦了组装过程和创建具体部件,使得我们不用去关心每个部件是如何组装的。

参考:http://www.cnblogs.com/feipeng/archive/2007/03/12/671932.html

同步与推荐

本文已同步至目录索引:深入理解JavaScript系列

深入理解JavaScript系列文章,包括了原创,翻译,转载等各类型的文章,如果对你有用,请推荐支持一把,给大叔写作的动力。

转载于:https://www.cnblogs.com/TomXu/archive/2012/02/22/2353341.html

深入理解JavaScript系列(27):设计模式之建造者模式相关推荐

  1. 深入理解JavaScript系列(33):设计模式之策略模式(转)

    介绍 策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户. 正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很 ...

  2. 深入理解JavaScript系列(33):设计模式之策略模式

    介绍 策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户. 正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很 ...

  3. 深入理解JavaScript系列(32):设计模式之观察者模式

    介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们 ...

  4. 深入理解JavaScript系列——汤姆大叔

    原文地址 深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaS ...

  5. 汤姆大叔深入理解JavaScript系列

    深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...

  6. [转载]深入理解JavaScript系列 --汤姆大叔

    深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...

  7. 深入理解JavaScript系列(转自汤姆大叔)

    深入理解JavaScript系列(转自汤姆大叔) 深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaSc ...

  8. 深入理解JavaScript系列:《你真懂JavaScript吗?》答案详解

    介绍 昨天发的<大叔手记(19):你真懂JavaScript吗?>里面的5个题目,有很多回答,发现强人还是很多的,很多人都全部答对了. 今天我们来对这5个题目详细分析一下,希望对大家有所帮 ...

  9. 深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:htt ...

最新文章

  1. Linux分区的认识
  2. Openresrt最佳案例 | 第2篇:Lua入门
  3. 程序员应当学会“偷懒”
  4. MapReduce排序-概述
  5. python时间序列数据分析,Python数据分析之时间序列
  6. Linux的实际操作:文件目录类的实用指令(echo head tail)
  7. phpexcel删除行_使用PHPExcel删除行
  8. 模拟利器Mockito
  9. wav文件头修复_贴唱混音之二——音频修复
  10. 百度地图依赖包php,调用百度地图
  11. APK 包名修改工具
  12. 工业锅炉计算机控制系统框图,锅炉控制(汇总).ppt
  13. 哈工大慕课 学生成绩管理系统V1.0~5.0
  14. 开发之准备:为目标设备创建映像
  15. 大数据学习(三十一)数据仓库如何处理缓慢变化维
  16. 中止执行后超过2年_中止两年终结本次执行吗
  17. IPv6 NDP邻居发现协议 1
  18. CSS3 弹性布局 flex 项目属性
  19. 趣味算法 四个点在同一个半圆的概率
  20. 软件开发中的角色分工

热门文章

  1. grep 显示前后几行
  2. 验证码加减乘PHP,使用php实现加减法验证码
  3. java 右移两位_java左移右移运算符
  4. 石头扫地机器人离线了怎么办_关于激光头故障,石头扫地机器人无限次复活记!...
  5. 自建邮件服务器_EDM邮件营销需要掌握的一系列知识(有福利)
  6. php+数学计算公式,PHP数学计算函数总结
  7. css响应式布局_Web前端新手怎么入门 如何用CSS做响应式布局
  8. 分享一份60页的《Python数据分析入门PPT》
  9. python论坛签到_论坛自动签到教程
  10. 2021年高考英语卷三成绩查询,2021年全国3卷高考外语卷难不难,今年全国3卷高考外语卷难度系数点评...