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 相关文章推荐
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
Jun 20 Javascript
Javascript实现多彩雪花从天降散落效果的方法
Feb 02 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
js时间戳与日期格式之间转换详解
Dec 11 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
Mar 06 Javascript
js实现动态时钟
Mar 12 Javascript
vue+iview实现文件上传
Nov 17 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
附件名前加网站名
2008/03/23 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
原生js 秒表实现代码
2012/07/24 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
Python使用minidom读写xml的方法
2015/06/03 Python
python3.5仿微软计算器程序
2020/03/30 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
小学教师的个人自我鉴定
2013/10/26 职场文书
简历自我评价模版
2014/01/31 职场文书
岁月神偷观后感
2015/06/11 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书