JavaScript学习之设计模式->责任链模式

责任链模式:责任链模式得角色分为发送者和接收者。发送者发送请求,接收者链中的第一个处理请求,当接受者不能处理请求时,将请求发送给下一个接收者。

责任链模式的特点: 1. 发送者只知道责任链中的第一个接收者。

                                  2.每一个接受者都对请求进行分析,要么处理它,要么往下传递。

                                  3.如果没有任何接受者处理请求,那么请求将从链上离开,不同的实现对此有不同的反应。

                                  4.每一个接收者知道的其他对象只有一个,即它的下家对象。

现有一个任务 需要Python实现。项目组中有 小1,小2,小3,小4分别会Java,C++,Python,C#。项目经理要把它分给谁呢?项目经理嫌麻烦,不像一个一个的问,就直接给了小1。小1发现自己不会,就把他推给了小2,小2也发现自己不会就把他推给了小3,小3发现自己会Python,就把这个任务做了。()。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Untitled Document</title>
		<script type="text/javascript" charset=utf-8 src="commons/CommonUtil.js"></script>
		<script type=text/javascript charset=utf-8>
			//**责任链模式
			//发送者 ,及接受者,发送者只知道责任链中的第一个接收者。
			//做项目  任务, 人员(及接受者)
			//做项目 ->:项目经理 :->task  项目组[小A,小B,小C,小D]
			var Assign = function(task){
				this.task = task;
			}
			var WorkFlow = function(assign){
				this.assign = assign;
			}
			WorkFlow.prototype = {
				constructor:WorkFlow,
				doHander:function(es){
					for(var i = 0, length = es.length; i < length; i++){
						if(es[i].cando == this.assign.task){
							es[i].doWork();
							break;
						}
					}
				}
			};
			var Accept =  function(name,cando){
				this.name = name;
				this.cando = cando;
				this.doWork = function(){
					document.write(this.name + " cando " + this.cando);
				}
			}

			var agn = new Assign("javascript");
			var es = [];
			var accept1 = new Accept("xiao 1","java");
			var accept2 = new Accept("xiao 2","javascript");
			var accept3 = new Accept("xiao 3","c语言编程");
			var accept4 = new Accept("xiao 4","c++编程");
			// es.push(accept1);
			// es.push(accept2);
			// es.push(accept3);
			// es.push(accept4);
			var wk = new WorkFlow(agn);
			//wk.doHander([accept1,accept2,accept3,accept4]);



			var WorkFlow2 = function(assign){
				this.assign = assign;
			}
			WorkFlow2.prototype = {
				constructor:WorkFlow,
				doHander:function(es){
					if(es.cando == this.assign.task){
						es.doWork();
					}else{
						arguments.callee.call(this,es.getSuccessor());
					}
				}
			};

			var Executer = function(name,cando){
				this.name = name;
				this.cando = cando;
				this.successor = null;
			}
			Executer.prototype = {
				constructor:Executer,
				doWork:function(){
					document.write(this.name + " cando " + this.cando);
				},
				setSuccessor:function(essor){
					this.successor = essor;
				},
				getSuccessor:function(){
					return this.successor;
				}
			}
			var execute1 = new Executer("xiao 1","java");
			var execute2 = new Executer("xiao 2","javascript");
			var execute3 = new Executer("xiao 3","Python");
			var execute4 = new Executer("xiao 4","c++编程");
			execute1.setSuccessor(execute2);
			execute2.setSuccessor(execute3);
			execute3.setSuccessor(execute4);
			var agn = new Assign("Python");
			var work = new WorkFlow2(agn);
			work.doHander(execute1);
		</script>
	</head>
	<body>
	</body>
</html>



 输出 xiao 3 cando Python

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值