模塊與類所謂的模塊,就是程序設計中,爲了完成某一功能所需的一段程序或子程序;或指能由編譯程序、裝配程序等處理的獨立程序單位;或指大型軟件系統中的一部分。
在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的結果以下圖 : 從結果能夠看出經過傳遞不一樣的字符串,分別獲取了ProductA 和 ProductB,這樣咱們輕鬆完成了一個簡單的工廠模式。