网站后台数据处理编辑主要是做什么的啊,网络营销外包推广系统,网店详情页面设计,phpstudy怎么创建网站什么是职责链模式 职责链模式的定义是#xff1a;使多个对象都有机会处理请求#xff0c;从而避免请求的发送者和接收者之间的耦合关系#xff0c;将这些对象连成一条链#xff0c;并沿着这条链传递该请求#xff0c;直到有一个对象处理它为止。举个例子#xff1a;当你从…什么是职责链模式 职责链模式的定义是使多个对象都有机会处理请求从而避免请求的发送者和接收者之间的耦合关系将这些对象连成一条链并沿着这条链传递该请求直到有一个对象处理它为止。举个例子当你从公交车后门上车之后你不可能直接把硬币放到收款箱里面 因为你不知道它在哪那你就只能把硬币给你前面一个人让他帮你传到前面一个人手上这样一直传递到站在收款箱旁边人的手上由他把硬币放到收款箱里面。 职责链模式思想 请求发送者只需要知道链中的第一个节点从而弱化了发送者和一组接收者之间的强联系。 JavaScript实现职责链模式AOP方式 Function.prototype.after function(fn) {var _self this;return function () {var ret _self.apply(this, arguments);if(ret nextSuccessor) {return fn.apply(this, arguments);}return ret;}} 是的没错在JavaScript中实现职责链模式就是如此的简单如果对上面AOP代码不了解可以参考我之前写的这篇文章JavaScript实现AOP这个方式和装饰者模式看起来很像从代码上来看确实很像但是他们的出发点是完全不同的 AOP实现装饰者模式在不改变已有函数内部的情况下添加一些新的功能你可以想象一下同心圆你每调用一次after就相当于给你的圆外面又加了一个圆来包裹住它。注意它们是包含关系 AOP实现职责链模式在函数执行之后确定是否执行下一个函数你每次调用after都相当于在已有函数之后添加一个函数至于是否执行后面这个函数取决于前一个函数的返回值。注意它们是链式关系 职责链模式实例 function cat (type) {if(type cat) {console.log(我是猫猫);} else {return nextSuccessor}
}function dog (type) {if(type dog) {console.log(我是狗狗);} else {return nextSuccessor}
}function pig (type) {if(type pig) {console.log(我是猪猪);} else {return nextSuccessor}
}Function.prototype.after function(fn) {var _self this;return function () {var ret _self.apply(this, arguments);if(ret nextSuccessor) {return fn.apply(this, arguments);}return ret;}
}var pet cat.after(dog).after(pig);pet(pig); //我是猪猪
pet(dog); //我是狗狗
pet(cat); //我是猫猫 请看上述代码我们给pet方法传入了三个不同的参数得到了不同的结果。拿第一次调用举例其执行过程是这样的传入“pig”先由cat方法判断cat方法发现自己处理不了于是把“pig”传递给dog方法return nextSuccessor来表示传递给下一个函数dog方法发现自己也处理不了再接着把“pig”传递到pig方法pig方法可以处理控制台打印我是猪猪。 你可能会觉得这不是浪费精神么上述功能只需使用下面的几行代码就能解决为何还要多写上面那么多代码 function pet(type) {if(type cat) {console.log(我是猫猫);} else if(type dog) {console.log(我是狗狗);} else if(type pig) {console.log(我是猪猪);}
}pet(pig); //我是猪猪
pet(dog); //我是狗狗
pet(cat); //我是猫猫 这样看来好像是简单了很多。但是你有没有考虑过如果以后突然多了猴子这种动物如果使用上面的垃圾代码那你就要去修改pet函数的源码多添加一条if语句判断是不是猴子其实这也还好如果是加了1万种动物呢那你就要在pet这个函数里添加1万条if语句什么还不够浮夸那你有没有考虑过一种动物还会分很多品种比如说猫咪分为长毛猫短毛猫。这样你的代码就会涉及到嵌套if语句。恕我直言现在你的代码已经丑成狗了嘻嘻 但是如果使用职责链模式每多一个种动物我们就给他定义一个函数然后添加到职责链上这样一来新的函数就和原来的函数高度解耦。并且我们的请求发送者只需要传递给链的第一个节点而不用关心传递给具体哪一个节点反正它会顺着职责链传送下去直到找到能处理请求的那个节点并且处理请求。岂不美哉 转载于:https://www.cnblogs.com/yonglin/p/8339239.html