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 相关文章推荐
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
基于JS实现仿百度百家主页的轮播图效果
Mar 06 Javascript
ES6新特性之变量和字符串用法示例
Apr 01 Javascript
Angular CLI 安装和使用教程
Sep 13 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
Sep 18 Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
JavaScript实现队列结构过程
Dec 06 Javascript
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
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
Python算法之栈(stack)的实现
2014/08/18 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
python线程的几种创建方式详解
2019/08/29 Python
Python编写打字训练小程序
2019/09/26 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
python代码中怎么换行
2020/06/17 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
.NET方向面试题
2014/11/20 面试题
共产党员公开承诺书
2014/03/25 职场文书
小学评语大全
2014/04/22 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书