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 相关文章推荐
走出JavaScript初学困境—js初学
Dec 29 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
Jan 03 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
javascript加减乘除的简单实例
Jul 12 Javascript
微信小程序 出现错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}解决办法
Feb 23 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
微信小程序上传图片到php服务器的方法
May 23 Javascript
d3.js实现图形缩放平移
Dec 19 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里的JS打印函数
2006/10/09 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
Js组件的一些写法
2010/09/10 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python对html过滤处理的方法
2018/10/21 Python
Python3标准库总结
2019/02/19 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
公司人力资源管理制度
2015/08/05 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL