再起航,我的学习笔记之JavaScript设计模式08(建造者模式)

我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧!

前几次,我们分享的都是工厂模式,工厂模式主要是为了创建对象实例或者类簇,关心的是最终创建的是什么,而不关心创建的过程,本次我们来分享创建对象的另一种模式,建造者模式,这种模式在创建独享的时候,要更复杂一些,虽然其目的也是为了创建对象,但是更多的是关心创建这个对象的过程。

建造者模式

建造者模式(Builder):

将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。

接着我们来看具体的示例

首先我们创建一个学生类

var Students=function(secret){
//学号
this.stuId=secret&&secret.stuId||"保密";
//身份证号
this.idCard=secret&&secret.idCard||"保密";
}

接着我们跟这个学生类添加原型方法

Students.prototype={
getStuId:function(){
return this.stuId;
},
getIdCard:function(){
return this.idCard;
}
}

接着我们实例化一个姓名解析类

var Names=function(name){
var that=this;
(function(name,that){
that.fullName=name;
if(name.indexOf(' ')>-1){
that.firstName=name.slice(0,name.indexOf(' '));
that.secondName=name.slice(name.indexOf(' '));
}
})(name,that)
}

最后我们实例化一个课程类

var Course=function(course){
var that=this;
(function(course,that){
switch(course){
case "math":
that.course="数学";
that.describe="发现数字之美";
break;
case "english":
that.course="英语";
that.describe="发现字母之美";
break;
case "chinese":
that.course="语文";
that.describe="发现文字之美";
break;
}
})(course,that)
}

同样的我们像课程类里添加方法

Course.prototype.changeCourse=function(course){
this.course=course;
}
Course.prototype.changeDescribe=function(describe){
this.describe=describe;
}

this.stuId=secret&&secret.stuId||"保密"

这句话表示如果存在secret这个参数,并且secret这个参数有stuId这个属性,那么我们就把这个属性值赋值个this的stuId属性,否则我们就使用默认的保密。

现在我们抽象出了3个类,学生类,姓名解析类,课程类,现在我们要写一个建造者类,在建造者类中,我们要通过对这3个类的调用,创建出一个完整的学生对象。

var student=function(name,course){
//创建学生缓存对象
var _student=new Students();
//创建学生姓名解析对象
_student.name=new Names(name);
//创建课程描述
_student.course=new Course(course);
//将学生对象返回
return _student;
}

我们来试着调用一下,并把结果打印出来

var stuTest=new student("张 三",'math');
console.log(stuTest.stuId);//保密
console.log(stuTest.name.firstName);//张
console.log(stuTest.course.course);//数学
console.log(stuTest.course.describe);//发现数字之美
stuTest.course.changeCourse('数学的创意');
console.log(stuTest.course.describe);//数学的创意

在建造者模式中,我们关心的是对象创建过程,因此我们通常将创建对象的类模块化,这样使被创建的类的每一个模块都可以得到灵活的运用与复用。

当然这种方式对于整体对象类的拆分无形中增加了结构的复杂性,因此如果对象粒度很小,或者模块间的复用率很低并且变动不大,我们最好还是要创建整体对象

也谢谢大家看到这里:)如果你觉得我的分享还可以请点击推荐,分享给你的朋友让我们一起进步~

好了以上就是本次分享的全部内容,本次示例参考自JavaScript设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

欢迎转载,转载请注明作者,原文出处。

上一篇:优化之sitemap+RSS


下一篇:P2512 [HAOI2008]糖果传递