建造者模式解读

概念解读

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

作用

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

注意事项

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

代码实践

  • 代码实现 //$.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.建造者模式的建造过程要比工厂复杂的多,是分步骤分模块进行的,可能每个模块部分都需要一个小型的类或者构造器去完成。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java面试通关手册

一份送给Java初学者的指南

我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailc...

1463
来自专栏大数据和云计算技术

算法系列 图数据结构探索(无向图搜索)

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第10篇《无向图搜索》,非常赞!希望对大家有帮助,大家会喜欢!

2004
来自专栏微信公众号:Java团长

开发中我们需要遵循的几个设计原则!

在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则和具体阐...

971
来自专栏编程

写好Java代码的30条经验总结

无可厚非你是一名程序员,但你真的是一个优秀的程序员吗?答案可不一定了。想要成为一个优秀的程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看Java代...

2115
来自专栏微信小程序开发

小程序支付,再来说说JS浮点数的坑

前言:客服收到报名工具小程序用户反馈:创建报名时,输入19.9元,但是,保存的是19.89元。很明显,这是前端的一个坑,JS浮点数的坑。

3552
来自专栏IMWeb前端团队

写给前端专家的一封公开信:关于分号(翻译)

本文作者:IMWeb frankfang 原文出处:IMWeb社区 未经同意,禁止转载 原文 Sean Silva 给我发来一封信: 我最近在浏览你...

1917
来自专栏游戏杂谈

字符串比较

网上看到有人也说是他遇到的一道笔试题,那我想这道题目其实还考过很多人。只不过当时是给我笔让我写出来,一下子懵住了,没缓过神来。写的算法时间复杂度为O(n*m),...

2292
来自专栏撸码那些事

【抽象那些事】 命令式抽象

这种坏味是由操作转换为类引起的,表现为类中只定义了一个方法,有时候类名和方法名相同。这种坏味还常常表现为方法操作的数据位于另一个类中。

3618
来自专栏华章科技

人生苦短,为什么我要用Python?

导读:随着机器学习的兴起,Python 逐步成为了「最受欢迎」的语言。它简单易用、逻辑明确并拥有海量的扩展包,因此其不仅成为机器学习与数据科学的首选语言,同时在...

561
来自专栏Crossin的编程教室

【Python 第8课】while

学会了if,有一个好处,就是你能听懂下面这个笑话了: 老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,就买一个。” 当晚,程序员老公手...

3156

扫码关注云+社区