本文實(shí)例講述了JavaScript設(shè)計(jì)模式之職責(zé)鏈模式。分享給大家供大家參考,具體如下:

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、崖州網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開(kāi)發(fā)、崖州網(wǎng)絡(luò)營(yíng)銷、崖州企業(yè)策劃、崖州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供崖州建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
一、職責(zé)鏈的定義:
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系,將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止。
二、實(shí)例場(chǎng)景說(shuō)明:
某公司對(duì)公司產(chǎn)品-手機(jī)進(jìn)行促銷活動(dòng),有以下政策:在正式購(gòu)買(mǎi)時(shí),已經(jīng)支付過(guò)500元定金的用戶會(huì)收到100元的商城優(yōu)惠卷,交200元定金的用戶可以收到50元的優(yōu)惠卷,而之前沒(méi)有支付定金的用戶只能進(jìn)入普通購(gòu)買(mǎi)模式,也就是沒(méi)有優(yōu)惠卷,主要危險(xiǎn)為在庫(kù)存有限的情況下不一定能買(mǎi)到手機(jī)。
三、實(shí)例代碼如下:
1、創(chuàng)建3中購(gòu)買(mǎi)模式的函數(shù)對(duì)象,如下:
/**
* @param: orderType 表示訂單類型
* @param: pay 表示用戶是否已經(jīng)支付定金
* @param: stock 表示當(dāng)前用戶普通購(gòu)買(mǎi)的手機(jī)庫(kù)存數(shù)量,交過(guò)定金的用戶不受此限制
**/
var order500 = function( orderType, pay, stock ){
if( orderType === 1 && pay === true)
console.log('500元定金預(yù)購(gòu),得到100優(yōu)惠卷');
else
return 'nextSuccessor'; //不知道下一個(gè)節(jié)點(diǎn)是誰(shuí),反正把請(qǐng)求往后面?zhèn)鬟f
};
var order200 = function( orderType, pay, stock){
if( orderType === 2 && pay === true)
console.log( '200元定金預(yù)購(gòu),得到50元優(yōu)惠卷' );
else
return 'nextSuccessor';
};
var orderNormal = function(orderType, pay, stock){
if(stock > 0)
console.log('普通購(gòu)買(mǎi),無(wú)優(yōu)惠卷');
else
console.log('手機(jī)庫(kù)存不足');
};
2、書(shū)寫(xiě)一個(gè)把函數(shù)包裝進(jìn)職責(zé)鏈節(jié)點(diǎn)的構(gòu)造函數(shù),如下:
var Chain = function(fn){
this.fn = fn;
this.successor = null;
};
Chain.prototype.setNextSuccessor = function( successor ){
return this.successor = successor;
};
Chain.prototype.passRequest = function(){
var ret = this.fn.apply( this, arguments );
if( ret === 'nextSuccessor'){
return this.successor && this.successor.passRequest.apply( this,successor, arguments );
}
return ret;
};
3、調(diào)用如下:
1> 把3個(gè)訂單函數(shù)分別包裝成職責(zé)鏈的節(jié)點(diǎn):
var chainOrder500 = new Chain( order500 ); var chainOrder200 = new Chain( order200 ); var chainOrderNormal = new Chain( orderNormal );
2> 指定節(jié)在職責(zé)鏈中的順序:
chainOrder500.setNextSuccessor( chainOrder200 ); chainOrder200.setNextSuccessor( chainOrderNormal );
3> 把請(qǐng)求傳遞給第一個(gè)節(jié)點(diǎn),如下:
chainOrder500.passRequest( 1, true, 500 ); //輸出:500元定金預(yù)購(gòu),得到100優(yōu)惠卷 chainOrder500.passRequest( 2, true, 500 ); //輸出:200元定金預(yù)購(gòu),得到50優(yōu)惠卷 chainOrder500.passRequest( 3, true, 500 ); //輸出:普通購(gòu)買(mǎi),無(wú)優(yōu)惠卷 chainOrder500.passRequest( 1, false, 0 ); //輸出:手機(jī)庫(kù)存不足
四、職責(zé)鏈模式優(yōu)點(diǎn):
通過(guò)上述代碼,我們可以靈活的添加和刪除節(jié)點(diǎn),以及可靈活的修改節(jié)點(diǎn)的順序。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
文章標(biāo)題:JavaScript設(shè)計(jì)模式之職責(zé)鏈模式應(yīng)用示例
文章來(lái)源:http://chinadenli.net/article30/jigpso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、微信公眾號(hào)、搜索引擎優(yōu)化、域名注冊(cè)、App設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)