深入理解JavaScript系列(27):设计模式之建造者模式详解


Posted in Javascript onMarch 03, 2015

介绍

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

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

正文

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

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对象是如何生产的。

总结

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

Javascript 相关文章推荐
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
Sep 28 Javascript
jquery选择符快速提取web表单数据示例
Mar 27 Javascript
js简单实现交换Li的值
May 22 Javascript
使用javascript插入样式
Mar 14 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
Angularjs 动态添加指令并绑定事件的方法
Apr 13 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
详解小程序云开发攻略(解决最棘手的问题)
Sep 30 Javascript
js中Object.create实例用法详解
Oct 05 Javascript
javascript验证身份证号
Mar 03 #Javascript
JS烟花背景效果实现方法
Mar 03 #Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 #Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
Mar 03 #Javascript
js+jquery常用知识点汇总
Mar 03 #Javascript
js实现宇宙星空背景效果的方法
Mar 03 #Javascript
Angular中的Promise对象($q介绍)
Mar 03 #Javascript
You might like
1.PHP简介
2006/10/09 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php网页病毒清除类
2014/12/08 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
python数据类型强制转换实例详解
2020/06/22 Python
python在地图上画比例的实例详解
2020/11/13 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
《埃及的金字塔》教学反思
2014/04/07 职场文书
美容院店长岗位职责
2014/04/08 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
故宫的导游词
2015/01/31 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏