一天一个设计模式---责任链模式

责任链模式

简介

将不同职责的步骤进行串联,前一个执行完成之后才可以执行下一个,即前一个的责任完成之后会将这个责任给到下一个。

组成结构

一共有两个主要的类

  • 抽象的处理类(Handle),封装了每一个职责处理请求的方法和下一步处理的处理器。
  • 具体的处理类(ConcreteHandler),对应抽象类的实现,实际处理请求并将责任传递到下一个。

实现方式

JS 复制代码
class Handle {
  constructor () {
    this.handled = false
  }
  setNext (handle) {
    this.next = handle
    return this.next
  }
  deal (ctx) {
    // do something whit ctx
    if (!this.handled && this.next) {
      this.next.deal(ctx)
    }
    return true
  }
}

class HandleA extends Handle {
  deal (ctx) {
    // do something whit ctx
    ctx.handleA = true
    if (!this.handled && this.next) {
      this.next.deal(ctx)
    }
    return true
  }
}

class HandleB extends Handle {
  deal (ctx) {
    // do something whit ctx
    ctx.handleB = true
    if (!this.handled && this.next) {
      this.next.deal(ctx)
    }
    return true
  }
}

class HandleC extends Handle {
  deal (ctx) {
    // do something whit ctx
    ctx.handleC = true
    if (!this.handled && this.next) {
      this.next.deal(ctx)
    }
    return true
  }
}

const handlea = new HandleA()
handlea
  .setNext(new HandleB())
  .setNext(new HandleC())

const ctx = {}
handlea.deal(ctx)
console.log(ctx); // { handleA: true, handleB: true, handleC: true }

可以看到,由handled来决定是否在当前处理节点终止,否则就会一直按照设置的链路往下执行,这就是责任链的意义,你可以把他应用于:http请求的处理,审批的设计实现等等。。。

相关推荐
大飞pkz3 小时前
【设计模式】代理模式
开发语言·设计模式·c#·代理模式
hans汉斯3 小时前
【人工智能与机器人研究】一种库坝系统水下成像探查有缆机器人系统设计模式
大数据·数据库·论文阅读·人工智能·设计模式·机器人·论文笔记
LoveXming3 小时前
Chapter9—享元模式
java·c++·设计模式·享元模式·开闭原则
charlie1145141915 小时前
精读C++20设计模式——结构型设计模式:代理模式
c++·学习·设计模式·代理模式·c++20·概论
星空寻流年19 小时前
设计模式第五章(门面模式)
android·设计模式
大飞pkz21 小时前
【设计模式】策略模式
开发语言·设计模式·c#·策略模式
yujkss21 小时前
23种设计模式之【状态机模式】-核心原理与 Java实践
java·ui·设计模式
bkspiderx1 天前
C++设计模式之行为型模式:职责链模式(Chain of Responsibility)
c++·设计模式·责任链模式
青草地溪水旁1 天前
设计模式(C++)详解——迭代器模式(4)
c++·设计模式·迭代器模式
大飞pkz1 天前
【设计模式】状态模式
开发语言·设计模式·c#·状态模式