JavaScript设计模式之建造者模式介绍


Posted in Javascript onDecember 28, 2014

建造者模式说明

1. 将一个复杂对象的 构造 与它的表示相分离,使同样的创建过程可有不同的表示,这就叫做建造者模式。
2. 面向对象语言中的说明,主要角色:

1>. Builder 这个接口类,定义这个建造者[工人],统一的可操作的行为方式,它表示一个复杂的结构对象;
2>. ConcreteBuilder 用于创建[实现] Builder 各种形态的实例对象,来表示 Builder 不同的表示;
3>. Director 这个指挥者 用于指导 Builder 实例的执行过程跟形式,用于与 Builder 的实例 表现 相分离,用于指导 这个 Builder 实例 按某规则顺序来创建生成 产品结果;
4>. ResultObject 创建的结果都会生成一个结果对象;这是具体创建者根据 Director 指导创建的结果;

3. 建造者模式实际,就是一个指挥者,一个建造者,一个使用指挥者调用具体建造者工作、并得从具体建造者得出结果的客户;

4. 建造者模式,模拟场景:[看到一个说明建造者模式描述的例子很好]

说一户家人要建房子,但房子主人或家里其他人是不懂得如何去建房子的,所以他得去请几个工人,这个建房子的队伍还得有个工头,来按房主人的想法来建一套房子,工头按房主人的要求设计要求工人如何如何做;

工头说,第一步先把房整体骨架搭起来,第二步睡房建造好,第三步把厨房装饰好,第四步把客厅建造装饰完毕,第五步...

工头是不做事的,但具体建造者必须按照工头的要求来做,第一步,第二步的这样步骤来建造,直至整个房子完成;

创建者必须要有创建这个房屋的所有技能,即建骨架,装饰睡房等...,即建造者所做的事,或所具有的能力,必须大于或等于指挥者要求要做的事,或具有的能力;

即指挥者是个组织者,而建造者提供技能;

5. JavaScript 这种弱语言里,没有接口这样的东西,就忽略接口定义这一层,直接创建具体建造者,再建一个 指导类来回调这个建造者;

实例源码

1. 工人建造者X:

function workerBuilder() {

    this.workOne = function() {

         //建房子骨架

    }

    this.workTwo=function() {

         //建睡房

    }

    this.workThree=function() {

         //建厨房

    }

    this.workFour=function() {

         //建客厅

    }

    //....

    

    this.getResult = function() {

         //建成房子

 var house = new House();


 //house.HouseFrame ...


 return house; 

    }

}

workBuilder 是具体建造者类,workOne, Two是要做的事情,建骨架等;

当然 workBuilder 可以多建几个,用于表示 工人 对于每个工作执行的方法不一样;但工作内容是一样的;

2. 指挥者类

function Director() {

     this.construct = function(builder) {

          builder.workOne();

          builder.workTwo();

          builder.workThree();

          builder.workFour();

          //...

          //上面的内容,顺序可设置,并且工作项也可以设定

     }

}

指挥者类下的 指导 方法,有对 建造者 的回调引用,内容包括建者工作内容几项或全部; 指挥者对建造者工人要做的事情进行组织跟安排;

3. 产品房子

function House() {

    this.HouseFrame = '';

    this.Room = '';

    this.Kitchen = '';

    this.LivingRoom = '';

    //...

}

4. 使用方法

var builder = new workBuilder();

var director = new Director();

director.construct(builder);
var house = builder.getResult();

第四步,整个使用相当于客户:房主人,房主人请 Director 工头来建房子,但是工头是不做事的,所以他指挥 builder 工个来建子,最后房主人从工人那里取得建好的房子;

其他说明

建造者模式比较适于那种,内容[抽象]复杂,实际场景表现又多个不一样,比如工作内容或顺序不一致的情况;比如每个人每天的生活过程啊,还有像上面的实例类似的场景;通过指导者层,可以减少对很多相似工作场合,但工作规则顺序不一致的环境;可以大减少对实际对象的建造抽象;

Javascript 相关文章推荐
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
实现easyui的datagrid导出为excel的示例代码
Nov 10 Javascript
React学习之事件绑定的几种方法对比
Sep 24 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
如何编写高质量JS代码
Dec 28 #Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 #Javascript
javascript中定义类的方法汇总
Dec 28 #Javascript
js数组的操作指南
Dec 28 #Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 #Javascript
javascript+canvas制作九宫格小程序
Dec 28 #Javascript
JavaScript设计模式之装饰者模式介绍
Dec 28 #Javascript
You might like
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python字符串中查找子串小技巧
2015/04/10 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python检测网络延迟的代码
2018/05/15 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
公司企业表扬信
2014/01/11 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
我爱我家教学反思
2014/05/01 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
留学推荐信中文范文
2015/03/26 职场文书
初中家长意见
2015/06/03 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技