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

Javascript-设计模式_职责链模式[编程语言教程]

定义

职责链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止

简而言之,请求以后,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确知道哪一个对象将会处理它——也就是该请求有一个隐式的接受者(implicit receiver)。根据运行时刻,任一候选者都可以响应相应的请求,候选者的数目是任意的,可以在运行时刻决定哪些候选者参与到链中

技术分享图片

 

核心思想

请求者不必知道是谁哪个节点对象处理的请求。如果当前不符合终止条件,那么把请求转发给下一个节点处理

职责链模式是一种对象行为型模式

 

场景

1000+万人口的新一线城市 ,以早高峰公交为例,早上早高峰的时候通常都是公交车前门拥堵,以至于没办法刷卡乘车;但是后门相对来说会空一些,这时只能选择后门上车,但是后门上车就刷不了卡,逃单?不存在的,这可不是作为讲文明、有素质的新一代青年应该做的,于是,只能往前面传递公交卡,请求前面的乘客帮忙传递至刷卡器处刷卡,但是在后门,刷卡器是在前门,这传递的过程中会通过请求多位乘客帮忙传递公交卡,这个传递的过程就是一种职责链模式,每一位传递的乘客就是职责链中的节点对象

 

特性

而当需求具有“传递”的性质时(代码中其中一种体现就是:多个 if、else if、else if、else 嵌套),就可以考虑将每个分支拆分成一个节点对象,拼接成为责任链

 

适用性

 

  • 如果有多个对象可以处理同一个请求,但是具体由哪个对象来处理该请求,是运行时刻动态确定的

    这种情况可以使用职责链模式,把处理请求的对象实现成为职责对象,然后把它们构成一个职责链,当请求在这个链中传递的时候,具体由哪个职责对象来处理,会在运行时动态判断

  • 如果你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求的话,可以使用职责链模式

    职责链模式实现了请求者和接收者之间的解耦,请求者不需要知道究竟是哪一个接收者对象来处理了请求

  • 如果想要动态指定处理一个请求的对象集合,可以使用职责链模式,职责链模式能动态的构建职责链

    也就是动态的来决定到底哪些职责对象来参与到处理请求中来,相当于是动态指定了处理一个请求的职责对象集合

式例

const Circle = function() {
    this.radius = 0
 
    this.drawByRadius = function(radius) {
        if(radius < 5) {
            this.drawVerySmalCircle()
        }else if(radius < 10) {
            this.drawSmalCircle()
        }else if(radius < 15) {
            this.drawMediumCircle()
        }else if(radius < 20) {
            this.drawBigCircle()
        }else{
            this.drawVeryBigCircle()
        }
    }
	
    this.drawVerySmalCircle = function() {
        console.log(‘画一个超小的圆( 5以下 )‘)
    }
    this.drawSmalCircle = function() {
        console.log(‘画一个小圆( 5-10 )‘)
    }
    this.drawMediumCircle = function() {
        console.log(‘画一个中圆 ( 10-15 )‘)
    }
    this.drawBigCircle = function() {
        console.log(‘画一个大圆 ( 15-20 )‘)
    }
    this.drawVeryBigCircle = function() {
        console.log(‘画一个超大的圆 ( 20以上 )‘)
    }
}
 
const circle = new Circle();
circle.drawByRadius(30)   // 画一个超大的圆 ( 20以上 )
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Javascript-设计模式_职责链模式