博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式解读
阅读量:6345 次
发布时间:2019-06-22

本文共 2080 字,大约阅读时间需要 6 分钟。

概念解读

文字解读:将一个复杂的对象的构建与表示分离,使得同样的构建可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户就需要指定建造的类型就可以得到他们,而具体构建的过程和细节就不用清楚了。建造者模式实际就是一个指挥者,一个建造者,一个使用指挥者去告诉建造者建造工作得到结果的客户。 建造者模式主要用于将一个复杂的对象进行分步骤去构建,这其中分步骤是一个稳定的算法,而复杂对象的各个部分是经常变化的,体会分就是合的思想。

拟物化解读:比如建造商去找包工头指挥施工队完成建筑,最后交付给建造商。

作用

  • 分步创建一个复杂对象。
  • 解耦封装过程和创建的组件。
  • 无需关心组件如何组装。

注意事项

  • 一个稳定的算法进行支撑
  • 加工工艺是暴露的

代码实践

  • 代码实现

    //$.ajax()属于构造者模式,其中各个基本参数就是它的建造者,而.ajax就是指挥者。  $.ajax({      url:'',      method:"",      success:function(){      },  })复制代码
  • 觉得还不清晰?

    我们尝试另外一种场景,比如我们要创建一个应聘者的类,那么这个应聘者首先是属于人类的,然后添加不同的属性,我们把不同的属性细致化为不同的建造者(类),来统一归纳使用。

    //每个实例化对象都个性化的方法需要this申明var Human=function(param){ this.skill=param&&param.skill||'保密'; this.hobby=param&&param.hobby||'保密';}//人类的原型,共用属性以及方法建议写到原型中Human.prototype={ getSkill:function(){ 	return this.skill;  }, getHobby:function(){ 	return this.hobby; } }var Named=function(name){ var that=this; //构造器 (function(name,that){ 	that.wholeName=name; 	if(name.indexOf(" ")>-1){ 		that.firstname=name.slice(0,name.indexOf(" ")); 		that.lastname=name.slice(name.indexOf(" ")); 	} })(name,that)}//实例化职位类:拓展知识点://1 需要定义that来避免this的混淆 ;2 switch之后没有冒号 //3 switch中的break是让语句符合判断条件之后,后续语句不再执行,是必备的 //4 建议在switch中写default的情况,处理异常情况的默认值var Work=function(){ var that=this; //构造器 //构造器中通过传入职位特征来设置相应的职位以及描述 (function(work,that){ 	switch(work){ 		case 'code':that.work='工程师'; 		that.workDesc='每天沉醉于编程'; 		break; 		case 'ui':that.work='设计师'; 		that.workDesc='设计是一种艺术'; 		break; 		default:that.work=work; 		that.workDesc="还不清楚你的职位描述"; 	} })(work,that)}Work.prototype.changeWork=function(work){ this.work=work;}Work.prototype.changeDesc=function(desc){ this.workDesc=desc;}//创建一个应聘者的类function Person=function(name,work){ var _person=new Human(); _person.name=new Named(name); _person.work=new Work(work); return _person; }var xiaoli=new Person('xiao li','code');// 检测各个属性以及方法console.log(xiaoli.skill);console.log(xiaoli.work.work);xiaoli.work.changeWork("ui");console.log(xiaoli.work.work);console.log(xiaoli.firstname);复制代码

拓展

  • 与工程模式的区别 1.从代码实例可以区分出来,工厂模式是给出产品名称,直接给出结果,而建造者模式需要用户一定的参与建造过程,指定参数。 2.建造者模式的建造过程要比工厂复杂的多,是分步骤分模块进行的,可能每个模块部分都需要一个小型的类或者构造器去完成。

转载地址:http://prcla.baihongyu.com/

你可能感兴趣的文章
[日常] Go语言圣经--示例: 并发的Echo服务
查看>>
BZOJ1969: [Ahoi2005]LANE 航线规划(LCT)
查看>>
linux内存管理之malloc、vmalloc、kmalloc的区别
查看>>
GreenDao 数据库升级 连接多个DB文件 或者指定不同的model&dao目录
查看>>
M1卡破解(自从学校升级系统之后,还准备在研究下)【转】
查看>>
vue 访问子组件示例 或者子元素
查看>>
linux内核--自旋锁的理解
查看>>
银行卡的三个磁道
查看>>
OpenSSL 提取 pfx 数字证书公钥与私钥
查看>>
Keepalived详解(四):通过vrrp_script实现对集群资源的监控【转】
查看>>
CollapsingToolbarLayoutDemo【可折叠式标题栏,顺便带有CardView卡片式布局】
查看>>
CentOS7.4安装配置mysql5.7 TAR免安装版
查看>>
解决IE二级链接无法打开故障
查看>>
Windows phone应用开发[16]-数据加密
查看>>
SQL Server 迁移数据到MySQL
查看>>
通用数据压缩算法简介
查看>>
The next Industry Standard in IT Monitoring, a python implementation Nagios like tool --- Shinken
查看>>
(笔记)找工作,该怎么进补
查看>>
div的显示和隐藏以及点击图标的更改
查看>>
(轉貼) Ubuntu將在ARM平台netbook上現身 (SOC) (News) (Linux) (Ubuntu)
查看>>