JavaScript设计模式之建造者模式实例教程


Posted in Javascript onJuly 02, 2018

本文实例讲述了JavaScript设计模式之建造者模式。分享给大家供大家参考,具体如下:

一、建造者模式模式概念

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

建造者模式主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。

通俗的说:就是一个白富美需要建一个别墅,然后直接找包工头,包工头再找工人把别墅建好。这其中白富美不用直接一个一个工人的去找。而且包工头知道白富美的需求,知道哪里可以找到工人,工人可以干活,中间节省了白富美的和工人之间沟通的成本,白富美也不需要知道房子具体怎么建,最后能拿到房就可以了。

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

模式作用:

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

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

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

注意事项:

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

2.加工工艺是暴露的--白富美不用关心如何建房子,但可以随时去看房子建得怎么样

三、建造者模式代码和实战总结

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>建造者模式</title>
</head>
<body>
<script>
 //1.产出东西是房子
 //2.包工头调用工人进行开工 而且他要很清楚工人们具体的某一个大项
 //3.工人是盖房子的 工人可以建卧室 建客厅 建厨房
 //4.包工头只是一个接口而已 他不干活 他只对外说我能建房子
 function Fangzi(){//Fangzi可以理解为单例模式
  if(!(this instanceof Fangzi)){
   return new Fangzi();
  }
  this.woshi = "";
  this.keting = "";
  this.chufang = "";
 }
 function Baogongtou(){
  if(!(this instanceof Baogongtou)){
   return new Baogongtou();
  }
  this.jianfangzi = function(gongren){
   gongren.jian_chufang();
   gongren.jian_keting();
   gongren.jian_woshi();
  }
 }
 function Gongren(){
  if(!(this instanceof Gongren)){
   return new Gongren();
  }
  this.jian_woshi = function(){
   console.log("建卧室");
  }
  this.jian_keting = function(){
   console.log("建客厅");
  }
  this.jian_chufang = function(){
   console.log("建厨房");
  }
  this.jiaofang = function(){
   var _fangzi = new Fangzi();
   _fangzi.woshi = "ok";
   _fangzi.keting = "ok";
   _fangzi.chufang = "ok";
   return _fangzi;
  }
 }
 var gongren = new Gongren();
 var baogongtou = new Baogongtou();
 baogongtou.jianfangzi(gongren);
 var myfangzi = gongren.jiaofang();
 console.log(myfangzi);
</script>
</body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具 http://tools.3water.com/code/HtmlJsRun测试运行效果如下:

JavaScript设计模式之建造者模式实例教程

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
锋利的jQuery jQuery中的DOM操作
Mar 21 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
Jun 14 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
自定义vue组件发布到npm的方法
May 09 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
JS实现的JSON序列化操作简单示例
Jul 02 #Javascript
JS内部事件机制之单线程原理
Jul 02 #Javascript
JS将网址url转化为JSON格式的方法
Jul 02 #Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 #Javascript
JS限制输入框输入的实现代码
Jul 02 #Javascript
webpack手动配置React开发环境的步骤
Jul 02 #Javascript
Angularjs中的$apply及优化使用详解
Jul 02 #Javascript
You might like
回帖脱衣服的图片实现代码
2014/02/15 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
php生成mysql的数据字典
2016/07/07 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
如何提高数据访问速度
2016/12/26 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
Pycharm Git 设置方法
2020/09/15 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
公司会计主管岗位责任制
2014/03/01 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
Python基础知识之变量的详解
2021/04/14 Python
go类型转换及与C的类型转换方式
2021/05/05 Golang