职责链模式

发布时间:2017-7-1 11:26:05编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"职责链模式 ",主要涉及到职责链模式 方面的内容,对于职责链模式 感兴趣的同学可以参考一下。

职责链模式

按顺序传递

if,else if  else if  else  的职责链。

最大的优点:弱化了发送者和一组接收者之间的强联系。

定义:每个对象都只负责往下面的 的对象抛请求。最后把函数包装进职责链节点。

优点:解耦链请求发送者和N个接收者之间的复杂关系。只有把请求传递给第一个节点即可。可拆卸和新增任意节点。

灵活可拆分的职责链节点。

//灵活的职责链//定金500客户var order500 = function( orderType, pay, stock ){	if( orderType == 1 && pay == true ){		console.log('定金500用户,得到100元优惠')	}else{		// order200( orderType, pay, stock );		return 'nextSucessor';	}}//定金500客户var order200 = function( orderType, pay, stock ){	if( orderType == 2 && pay == true ){		console.log('定金200用户,得到50元优惠')	}else{		// orderNormal( orderType, pay, stock ); //普通购买		return 'nextSucessor';		//异步 手动设置		// var self = this;		// setTimeout(function(){		// 	self.next();		// },2000)	}}//普通购买var orderNormal = function( orderType, pay, stock ){	if( stock > 0  ){		console.log('普通购买,无优惠劵')	}else{		// order200( orderType, pay, stock );   测试,只需要传给第一个节点: order500( 1, true, 500 );		console.log('手机库存不足');	}}//构建灵活的职责链,将以上函数包装进 职责链节点。var Chain = function( fn ){	this.fn = fn;	this.successor = null;}//指定链中的下一个节点Chain.prototype.setNextSuccesstor = function( successor ){	return this.successor = successor;}//传递请求给下一个节点Chain.prototype.passRequst = function(){		var ret = this.fn.apply( this, arguments );	if( ret == 'nextSucessor' ){		return this.successor && this.successor.passRequst.apply( this.successor, arguments );	}	return ret;}//适合异步的职责链,创建Chain.prototype.next = function(){	return this.successor && this.successor.passRequst.apply( this.successor, arguments );}//三个节点。var chainOrder500 = new Chain( order500 );var chainOrder200 = new Chain( order200 );var chainOrderNormal = new Chain( orderNormal );chainOrder500.setNextSuccesstor( chainOrder200 ); chainOrder200.setNextSuccesstor( chainOrderNormal ); //请求:chainOrder500.passRequst( 1, true, 500 );

//用AOP实现指责链。  

Function.prototype.after = function( fn ){	var self = this;	return function(){		var ret = self.apply( this, arguments );		if( ret == 'nextSucessor' ){			return fn.apply( this, arguments );		}		return ret;	}}var order = order500.after( order200 ).after( orderNormal );order( 1, true, 500 );


上一篇:值得推荐的C/C++开源框架和库
下一篇:HTML5 2D平台游戏开发——地图绘制篇之Camera

相关文章

关键词: 职责链模式

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款