<h1>灵活可拆分的职责链节点案例</h1>
<script>
var order500 = function( orderType, pay, stock ){
if( orderType === 1 && pay === true ){
console.log( "500元定金预购,得到100元优惠券" );
}else{
return "nextSuccessor";
}
};
var order200 = function( orderType, pay, stock ){
if( orderType === 2 && pay === true ){
console.log( "200元定金预购,得到50元优惠券" );
}else{
return "nextSuccessor"
}
};
var orderNormal = function( orderType, pay, stock ){
if( stock > 0 ){
console.log( "普通购买,无优惠券 " );
}else{
console.log( "手机库存不足" );
}
};
var Chain = function( fn ){
this.fn = fn;
this.successor = null;
};
Chain.prototype.setNextSuccessor = function( successor ){
return this.successor = successor;
};
Chain.prototype.passRequest = function(){
var res = this.fn.apply( this, arguments );
if( res === "nextSuccessor" ){
return this.successor.passRequest.apply( this.successor, arguments );
}
return res;
};
//现在我们吧3个订单函数分别包装成职责链的节点
var chainOrder500 = new Chain( order500 );
var chainOrder200 = new Chain( order200 );
var chainOrderNormal = new Chain( orderNormal );
//然后指定节点在指责链的顺序
chainOrder500.setNextSuccessor( chainOrder200 );
chainOrder200.setNextSuccessor( chainOrderNormal );
//最后传递请求
chainOrder500.passRequest( 1, false, 0 );
//通过改进,我们可以自由灵活地增加、移除和修改链接中的节点,
//假如某天网站运营人员又提出支持300远的定金购买,那我们就在该链中增加一个节点即可
</script>
js职责链模式
最新推荐文章于 2023-04-27 21:57:05 发布