Javascript设计模式-11-职责链模式

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');
        }
    }

    /*
        创建一个构建函数,参数为一个接收者
        构建函数创建的原型上有两个方法

        next() 手动设置,当前接收者的下一级接收者
        passRequest() 通过请求方法,如果不通过会传递给下一级操作
    */ 
    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);

        // 如果返回值是 next ,就将请求传递给下一级接收者
        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);

文章列表

  1. javascript设计模式 – 设计原则
  2. JavaScript设计模式–高阶函数
  3. Javascript 设计模式 - 01 - 原型模式
  4. Javascript 设计模式 - 02 - 单例模式
  5. Javascript 设计模式 - 03 - 建造者模式
  6. Javascript 设计模式 - 04 - 工厂模式
  7. Javascript 设计模式 - 05 - 外观模式
  8. Javascript 设计模式 - 06 - 代理模式
  9. Javascript 设计模式 - 07 - 观察者模式(发布订阅模式)
  10. Javascript 设计模式 - 08 - 策略模式
  11. Javascript 设计模式 - 09 - 命令模式
  12. Javascript 设计模式 - 10 - 迭代器模式
  13. Javascript 设计模式 - 11 - 职责链模式
  14. Javascript 设计模式 - 12 - 适配器模式
  15. Javascript 设计模式 - 13 - 模板方法
  16. Javascript 设计模式 - 14 - 组合模式
  17. Javascript 设计模式 - 15 - 享元模式
  18. Javascript 设计模式 - 16 - 中介者模式
  19. Javascript 设计模式 - 17 - 装饰者模式
  20. Javascript 设计模式 - 18 - 状态模式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值