javascript的设计模式实现06之Chain of Responsibility

Chain of Responsibility模式参考图片:


代码:

var Handler = function() {};
Handler.prototype.getSuccessor = function() {
	return this.successor;
};
Handler.prototype.setSuccessor = function(o) {
	this.successor = o;
};
Handler.prototype.handlerRequest = function(request) {
	if (this.successor != null)
		this.successor.handlerRequest(request);
	else
		console.log("the end");
};

var ConcreteHandler1 = function(o) {
	this.setSuccessor(o);
	ISuper = {
		handlerRequest: this.handlerRequest
	};
	this.handlerRequest = function(request) {
		console.log("ConcreteHandler1 operation");
		if (request.indexOf("key1") >= 0) {
			console.log("is me");
			return;
		}
		ISuper.handlerRequest.call(this, request);
	};
};
ConcreteHandler1.prototype = new Handler;
ConcreteHandler1.prototype.constructor = ConcreteHandler1;

var ConcreteHandler2 = function(o) {
	this.setSuccessor(o);
	ISuper = {
		handlerRequest: this.handlerRequest
	};
	this.handlerRequest = function(request) {
		console.log("ConcreteHandler2 operation");
		if (request.indexOf("key2") >= 0) {
			console.log("is me");
			return;
		}
		ISuper.handlerRequest.call(this, request);
	};
};
ConcreteHandler2.prototype = new Handler;
ConcreteHandler2.prototype.constructor = ConcreteHandler2;

var ConcreteHandler3 = function(o) {
	this.setSuccessor(o);
	ISuper = {
		handlerRequest: this.handlerRequest
	};
	this.handlerRequest = function(request) {
		console.log("ConcreteHandler3 operation");
		if (request.indexOf("key3") >= 0) {
			console.log("is me");
			return;
		}
		ISuper.handlerRequest.call(this, request);
	};
};
ConcreteHandler3.prototype = new Handler;
ConcreteHandler3.prototype.constructor = ConcreteHandler3;

var o = new ConcreteHandler3(new ConcreteHandler2(new ConcreteHandler1()));
o.handlerRequest("key2");


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值