var orderType = function(orderType, pay, stock) {
if( orderType === 1 ) {
if( pay === true ) {
console.log("500元定金预购,得到100优惠券");
} else {
if ( stock > 0 ) {
console.log("普通购买,无优惠券");
} else {
console.log("手机库存不足");
}
}
} else if( orderType === 2 ) {
if( pay === true ) {
console.log("200元定金预购,得到50优惠券");
} else {
if ( stock > 0 ) {
console.log("普通购买,无优惠券");
} else {
console.log("手机库存不足");
}
}
} else if( orderType === 3 ) {
if ( stock > 0 ) {
console.log("普通购买,无优惠券");
} else {
console.log("手机库存不足");
}
}
}
var order500 = function(orderType, pay, stock){
if( orderType === 1 && pay === true) {
console.log("500元定金预购,得到100优惠券");
} else {
order200(orderType, pay, stock)
}
}
var order200 = function(orderType, pay, stock){
if( orderType === 2 && pay === true) {
console.log("200元定金预购,得到50优惠券");
} else {
orderNormal(orderType, pay, stock)
}
}
var orderNormal = function(orderType, pay, stock){
if ( stock > 0 ) {
console.log("普通购买,无优惠券");
} else {
console.log("手机库存不足");
}
}
var order500m = function(orderType, pay, stock){
if( orderType === 1 && pay === true) {
console.log("500元定金预购,得到100优惠券");
} else {
return 'nextSuccessor';
}
}
var order200m = function(orderType, pay, stock){
if( orderType === 2 && pay === true) {
console.log("200元定金预购,得到50优惠券");
} else {
return 'nextSuccessor';
}
}
var orderNormalm = 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 ret = this.fn.apply(this, arguments);
if(ret === 'nextSuccessor'){
return this.successor &&
this.successor.passRequest.apply(this.successor, arguments);
}
return ret;
}
var chainOrder500 = new Chain(order500m);
var chainOrder200 = new Chain(order200m);
var chainOrderNormal = new Chain(orderNormalm);
chainOrder500.setNextSuccessor( chainOrder200 );
chainOrder200.setNextSuccessor( chainOrderNormal );
chainOrder500.passRequest(2, true, 0);
console