Javascript设计模式 - 11 - 职责链模式
简介
职责链是使多个对象都有机会处理请求,从而避免发送者和接受者之间的耦合关系,将这个对象练成一条链,并沿着这条连传递该请求,直到有一个对象处理它为止
链中收到请求的对象要么亲自处理它,要么转发给下一个候选者,提交方并不明确有多少个对象会处理它,任意候选者都可以响应响应的请求,可以在运行时决定哪些候选者参与到链中
个人理解
通过职责链上多个对象分解请求流程,实现请求在多个对象之间传递,直到最后一个对象完成请求处理
优点
请求发送者只需要知道链中的第一个节点,从而弱化了发送者和一组接收者之间的强联系
代码
function testA (type, amount) {
if (type ===
1 && amount >
500) {
console.log(`testA is pass type: ${type} amount: ${amount}`);
}
else {
return 'next';
}
}
function testB (type, amount) {
if (type ===
1 && amount <
500) {
console.log(`testB is pass type: ${type} amount: ${amount}`);
}
else {
return 'next';
}
}
function testC (type, amount) {
if (type ===
0 ) {
console.log(`testC is pass type: ${type} amount: ${
'null'}`);
}
else {
console.log(
'something is wrong');
}
}
function Chain(fn) {
this.fn = fn;
this.nextHandle =
null;
}
Chain.prototype.next =
function (nextHandle) {
return this.nextHandle = nextHandle;
}
Chain.prototype.passRequest =
function () {
var res =
this.fn.apply(
this,
arguments);
if (res ===
'next') {
return this.nextHandle.passRequest.apply(
this.nextHandle,
arguments);
}
return res;
}
var chainTestA =
new Chain(testA);
var chainTestB =
new Chain(testB);
var chainTestC =
new Chain(testC);
chainTestA.next(chainTestB);
chainTestB.next(chainTestC);
chainTestA.passRequest(
1,
400);
文章列表
javascript设计模式 – 设计原则JavaScript设计模式–高阶函数Javascript 设计模式 - 01 - 原型模式Javascript 设计模式 - 02 - 单例模式Javascript 设计模式 - 03 - 建造者模式Javascript 设计模式 - 04 - 工厂模式Javascript 设计模式 - 05 - 外观模式Javascript 设计模式 - 06 - 代理模式Javascript 设计模式 - 07 - 观察者模式(发布订阅模式)Javascript 设计模式 - 08 - 策略模式Javascript 设计模式 - 09 - 命令模式Javascript 设计模式 - 10 - 迭代器模式Javascript 设计模式 - 11 - 职责链模式Javascript 设计模式 - 12 - 适配器模式Javascript 设计模式 - 13 - 模板方法Javascript 设计模式 - 14 - 组合模式Javascript 设计模式 - 15 - 享元模式Javascript 设计模式 - 16 - 中介者模式Javascript 设计模式 - 17 - 装饰者模式Javascript 设计模式 - 18 - 状态模式