模块与类所谓的模块,就是程序设计中,为了完成某一功能所需的一段程序或子程序;或指能由编译程序、装配程序等处理的独立程序单位;或指大型软件系统中的一部分。
在NodeJS中能够理解为为完成某一功能所需的程序或子程序,同时也能够将NodeJS的一个模块理解为一个“类”,须要注意的是自己并不是是类,而只是简单意义上的一个对象,该对象能够拥有多个方法和属性,例如咱们新建一个module.JS,例以下面代码所示:前端
.==.=(itemName){ (!itemName){ () }{ (itemName)} } .=(){ .()} (myname){ =myname}代码说明
通常来讲 exports 和 module.exports 的成员为公有成员,而非exports 和 module.exports的成员为私有成员。web
接下来咱们新建一个showModule.js的文件来验证咱们的结论。 编程
=().(.).().().(.myname)
获取Person对象,输出相关的公有成员,而后在测试下私有成员myname是否能够调用,执行完showModule.js后,返回结果以下:
设计模式
下面咱们来查看官网的例子,其目的的使用 MyStream 继承 events.EventEmitter 对象。示例代码以下:网络
= ()= ()() { .()} .()..= (data) { .(data)}= ().().(.super_ === ).(() => { console.log(`Received data: `)}).()代码说明
下面小编带着你们亲自完成一个继承实例,例如学生继承人这个类,首先咱们来建立一个Person的基类,示例代码以下:app
.=(){ .=.=(){ .()} .=(){ .()} }
接下来咱们建立一个student类继承person类,且是一个动态的student类,代码以下:ide
=()=()(){ .call()} .()..=(){ .()} .=
最后咱们在app.js在引用person,student类,同时调用自身特有的方法,代码以下:函数
=()=()=()=().().().().().().().().().()
运行app.js,从下图的运行结果咱们成功的实现了类的继承关系。学习
接下来,你会问小编,如何重写父类的方法,那就须要在子类的方法中添加被继承类的方法,如建立overload.js,代码以下: 测试
=()=()(){ .call().=(){ .()} } .().=
在上面的例子中,咱们都是经过new的方法动态调用student方法,有没有使用静态的方法进行调用呢,就无需咱们每次调用时,new一个对象了,答案确定是的有,具体代码以下:
=()=()(){ .call().().=(){ .()} } =().=..=..=.
而后咱们新建一个appstatic.js文件,经过静态的方法调用刚才改写的方法 ,具体代码以下:
=().().().()
这样调用是否是特别简单呢,这样作的好处使咱们能够避免代码的冗余。固然不是全部的类能够这样调用,若是每次new一个对象都须要初始一些变量的值,小编建议选择使用动态建立的方法。
接下来小编给你们一块儿了解经常使用的设计模式:单例模式、适配器模式、工厂模式 。
NodeJS中利用模块实现单例模式的方法和上述思想一致,下面咱们来建立一个single_class.js方法实现单例模式,代码以下:
=.=(name){ (name){ .=name.=.=} .={ ::(){ .(+.++.++.)} } .=(){ (===){ =(name) } } }
接下来,咱们建立single_App.js来验证是否实现了单例模式,代码以下:
=()=()=.().()singleObj2=Single()singleClass2=singleObj2.getInstance()singleClass2.show()接下来咱们运行相关代码
依据上图,咱们一块儿建立三个类,Target,Adapter和Adaptee。Adapter 调用 Adaptee中方法的具体实现。建立一个Target类,其中包含request方法,代码以下:
.=(){ .=(){ .()} }
建立Adaptee类,实现specialRequest方法,代码以下
.=(){ .=(){ .()} }
建立Adapter(适配器)类,继承Target类,并重写其request方法,代码以下:
=()=()=()(){ .call().=(){ =().()} } .().=
最后咱们建立脚本client.js调用适配器中request的方法,代码以下:
=()=().()执行完client.js返回结果以下:
从运行结果能够看出,适配器调用了Adaptee 中的 specialRequest 方法,这样就实现了NodeJS编程下的适配器模式。
.=(){ .=(){ .()} }建立两个继承于product类 的ProductA 类和 ProductB 类 ,代码以下:
=()=()(){ .call().=(){ .()} } .().=productA 和 productB 实现方法是同样的,小编就不在这里啰嗦了。接下来经过productFactory 来建立工厂对象,根据不一样的参数获取不一样的参数对象,具体的代码以下:
=()=().=(type){ (type){ : (): : ()} }建立client.js, 使用productFactory来调用creatProduct 建立Product对象,具体代码以下:
=()=.().()=.().()运行Client.js的结果以下图 :