Javascript 责任链模式

  1. 责任链模式可以用来消除请求的发送者和接受者之间的耦合。这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的。链中的每个对象可以处理请求,也可以将其传给下一个对象。javascript内部就是使用这个模式来处理时间捕获和冒泡的问题。
  2. 责任链模式中的角色: 发出者、接受者
  3. 责任链模式的流程:
  • 发送者知道链中的第一个接受者,它向这个接收者发出来的请求;
  • 每一个接收者都对请求进行分析,要么处理它,要么往下传递;
  • 每一个接收者知道的其他对象只有一个,即它的下家对象;
  • 如果没有任何的接收者处理请求,那么请求将从链上离开,不同的实现对此有不同的反应;

//模拟场景  -》:项目经理  :-》task  项目组(A  B  C D)
//任务类
var Assign = function(task){
       this.task = task;
};
//接收任务的类
var workFlow = function(assign){
   this.assign = assign;
}
workFlow.prototype = {
        constructor:workFlow,
//分析当前任务谁能去完成执行  len是个缓存,不用每次去遍历es
        filterHandler:function(es){
           for(var i=0 ,len = es.length; i<len;i++){
               if(this.assign.task === es[i].cando){
                    return es[i].todo();
}
}
return;
         }
};
//处理者
var Executor = function(name,cando){
     this.name = name;//接收者的姓名
     this.cando = cando;//擅长的任务
};
Executor.prototype = {
   constructor: Executor,
   todo:function(){
         document.write(this.name+'开发'+this.cando);
}};
//4个接收者
var e1 = new Executor('A','javascript');

var e2 = new Executor('B','css');

var e3= new Executor('C','java');

var e4 = new Executor('D','sql');

//实例化任务对象
var assign = new Assign('java');
//处理任务的实例
var wf = new workFlow(assign);
wf.filterHanlder([e1,e2,e3,e4]);



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值