技術(shù)領(lǐng)域
本發(fā)明涉及一種調(diào)度方法及裝置,屬于WEB信息處理領(lǐng)域,具體是涉及一種基于彈射器的事件調(diào)度方法及裝置。
背景技術(shù):
在前端javascript開發(fā)領(lǐng)域,閉包的開發(fā)模式能促進(jìn)功能的模塊化,并且降低模塊間的耦合性,避免全局污染。但是在閉包間的通信上,現(xiàn)有的開發(fā)模式往往需要明確到閉包所暴露的接口,導(dǎo)致閉包模塊在協(xié)作方面產(chǎn)生極大的耦合、提升了功能的復(fù)雜度。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于彈射器的事件調(diào)度方法及裝置,其目的在于,解決并優(yōu)化前端開發(fā)中閉包間的通信所導(dǎo)致的閉包模塊在協(xié)作方面產(chǎn)生極大的耦合、提升了功能復(fù)雜度的技術(shù)問題。
為了解決上述問題,根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于彈射器的事件調(diào)度方法,包括:
步驟1,初始化事件彈射器;
步驟2,將用于實(shí)現(xiàn)自定義功能的事件注冊(cè)到所述事件彈射器中;
步驟3,由事件彈射器接收外部程序的事件調(diào)用請(qǐng)求,并通過事件調(diào)用請(qǐng)求中傳遞的事件名稱查找并執(zhí)行事件彈射器中的已經(jīng)注冊(cè)事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度方法,所述事件彈射器中包括:事件名稱,以及與事件名稱對(duì)應(yīng)的事件函數(shù)堆棧,其中:事件函數(shù)堆棧是由事件構(gòu)成的集合,并且事件函數(shù)堆棧按照事件的添加順序從前往后順序執(zhí)行所包含的事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度方法,所述事件彈射器接收事件調(diào)用請(qǐng)求中傳遞的擴(kuò)展參數(shù),并在執(zhí)行所述事件時(shí),將擴(kuò)展參數(shù)傳遞至相應(yīng)的事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度方法,所述事件是javascript函數(shù)。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度方法,所述事件彈射器采用單例與工廠的混合模式。
為了解決上述問題,根據(jù)本發(fā)明的另一個(gè)方面,提供了一種基于彈射器的事件調(diào)度裝置,包括:
初始化模塊,初始化事件彈射器;
注冊(cè)模塊,將用于實(shí)現(xiàn)自定義功能的事件注冊(cè)到所述事件彈射器中;
調(diào)度模塊,由事件彈射器接收外部程序的事件調(diào)用請(qǐng)求,并通過事件調(diào)用請(qǐng)求中傳遞的事件名稱查找并執(zhí)行事件彈射器中的已經(jīng)注冊(cè)事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度裝置,所述事件彈射器中包括:事件名稱,以及與事件名稱對(duì)應(yīng)的事件函數(shù)堆棧,其中:事件函數(shù)堆棧是由事件構(gòu)成的集合,并且事件函數(shù)堆棧按照事件的添加順序從前往后順序執(zhí)行所包含的事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度裝置,所述事件彈射器接收事件調(diào)用請(qǐng)求中傳遞的擴(kuò)展參數(shù),并在執(zhí)行所述事件時(shí),將擴(kuò)展參數(shù)傳遞至相應(yīng)的事件。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度裝置,所述事件是javascript函數(shù)。
優(yōu)選的,上述的一種基于彈射器的事件調(diào)度裝置,所述事件彈射器采用單例與工廠的混合模式。
總體而言,本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠利用事件彈射機(jī)制解決了javascript 閉包間的通信問題,降低了javascript 閉包間的耦合度,提升了代碼的復(fù)用率和擴(kuò)展性,降低了維護(hù)成本。
附圖說明
附圖1是本發(fā)明的邏輯示意圖。
附圖2是本發(fā)明的事件執(zhí)行時(shí)的邏輯示意圖。
附圖3是本發(fā)明的閉包與觀察者的合作運(yùn)行圖。
具體實(shí)施方式
下面通過實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體的說明。
為了解決上述問題,根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于彈射器的事件調(diào)度方法,包括:
步驟1,初始化事件彈射器;
步驟2,將用于實(shí)現(xiàn)自定義功能的事件注冊(cè)到所述事件彈射器中;
步驟3,由事件彈射器接收外部程序的事件調(diào)用請(qǐng)求,并通過事件調(diào)用請(qǐng)求中傳遞的事件名稱查找并執(zhí)行事件彈射器中的已經(jīng)注冊(cè)事件。
其中,所述事件彈射器中包括:事件名稱,以及與事件名稱對(duì)應(yīng)的事件函數(shù)堆棧,其中:事件函數(shù)堆棧是由事件構(gòu)成的集合,并且事件函數(shù)堆棧按照事件的添加順序從前往后順序執(zhí)行所包含的事件。
其中,所述事件彈射器接收事件調(diào)用請(qǐng)求中傳遞的擴(kuò)展參數(shù),并在執(zhí)行所述事件時(shí),將擴(kuò)展參數(shù)傳遞至相應(yīng)的事件。
其中,所述事件是javascript函數(shù),事件彈射器采用單例與工廠的混合模式。
為了解決上述問題,根據(jù)本發(fā)明的另一個(gè)方面,提供了一種基于彈射器的事件調(diào)度裝置,包括:
初始化模塊,初始化事件彈射器;
注冊(cè)模塊,將用于實(shí)現(xiàn)自定義功能的事件注冊(cè)到所述事件彈射器中;
調(diào)度模塊,由事件彈射器接收外部程序的事件調(diào)用請(qǐng)求,并通過事件調(diào)用請(qǐng)求中傳遞的事件名稱查找并執(zhí)行事件彈射器中的已經(jīng)注冊(cè)事件。
其中,所述事件彈射器中包括:事件名稱,以及與事件名稱對(duì)應(yīng)的事件函數(shù)堆棧,其中:事件函數(shù)堆棧是由事件構(gòu)成的集合,并且事件函數(shù)堆棧按照事件的添加順序從前往后順序執(zhí)行所包含的事件。
其中,所述事件彈射器接收事件調(diào)用請(qǐng)求中傳遞的擴(kuò)展參數(shù),并在執(zhí)行所述事件時(shí),將擴(kuò)展參數(shù)傳遞至相應(yīng)的事件。
其中,所述事件是javascript函數(shù),所述事件彈射器采用單例與工廠的混合模式。
實(shí)施例1
如圖1所示,本實(shí)施例提供了一種前端觀察者方式的事件調(diào)度邏輯圖。圖中,觀察者的核心是一個(gè)“事件彈射器”,既事件集合。
事件表示功能單元,在javascript 中是一個(gè)函數(shù)。
事件彈射器本身既負(fù)責(zé)事件的錄入和管理,同時(shí)也負(fù)責(zé)事件的獲取和執(zhí)行。
事件彈射器對(duì)應(yīng)多個(gè)事件,事件在事件彈射器的表現(xiàn)形式為:事件名稱、事件函數(shù)堆棧。事件函數(shù)堆棧的好處在于,同一個(gè)事件可以在執(zhí)行效果上被疊加,便于觀察者與實(shí)際場(chǎng)景解耦,需要注意的是堆棧是現(xiàn)進(jìn)先出的原則,既按照添加順序從前往后執(zhí)行。
如圖2所示,外部通過調(diào)用觀察者,傳入一個(gè)事件名稱,觀察者根據(jù)事件名稱查找出事件堆棧并遍歷執(zhí)行。如果外部同時(shí)傳入了擴(kuò)展數(shù)據(jù),擴(kuò)展數(shù)據(jù)會(huì)在事件堆棧遍歷執(zhí)行的過程中傳遞給函數(shù)。
閉包與觀察者的合作運(yùn)行如圖3所示。在觀察者模式下,摒棄了閉包舊的開發(fā)模式(閉包直接關(guān)聯(lián)),閉包只需要將事件在觀察者上注冊(cè),可以在任何時(shí)間、任意地方隨意調(diào)用。
觀察者將閉包之間強(qiáng)行分隔開,閉包只需要提供規(guī)范的事件序列便可完成與其它閉包的協(xié)作。觀察者本身不對(duì)規(guī)范做約束,全靠開發(fā)者自己約束。
為更加全面的支持開發(fā)場(chǎng)景,觀察者采用:?jiǎn)卫c工廠的混合模式,代碼示例如下:
* 單例模式
* 全局默認(rèn)監(jiān)聽者
window.Observer.on(…)
* 工廠模式
* 特定場(chǎng)景返回新的實(shí)例,方便定制
var myObserver = window.Observer.create();
myObserver.on(…)
本實(shí)施例描述的“觀察者”利用事件彈射機(jī)制解決了javascript 閉包間的通信問題。降低了javascript 閉包間的耦合度,提升了代碼的復(fù)用率和擴(kuò)展性,降低了維護(hù)成本。
以上方法實(shí)施例和裝置實(shí)施例是一一對(duì)應(yīng)的,因此方法實(shí)施例的擴(kuò)展方式亦可用于裝置實(shí)施例。
本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。