Javascript 责任链模式

来源:互联网 发布:有效工作时间 知乎 编辑:程序博客网 时间:2024/06/09 10:39
  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 0
原创粉丝点击