再起航,我的学习笔记之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 @   东城慕水  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
阅读排行:
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
点击右上角即可分享
微信分享提示