再起航,我的学习笔记之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设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

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

posted @ 2017-08-16 11:52  东城慕水  阅读(205)  评论(0)    收藏  举报
编辑推荐:
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
· C# 代码如何影响 CPU 缓存速度?
· 智能桌面机器人:使用 .NET 为树莓派开发 Wifi 配网功能
阅读排行:
· 一则复杂 SQL 改写后有感
· 接口被刷百万QPS,怎么防?
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一个开源免费、功能丰富的 WPF 自定义控件资源库
· 提升Avalonia UI质感,跨平台图标库选型实践
点击右上角即可分享
微信分享提示