最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

前端设计模式——职责链模式

来源:博客园


(资料图)

职责链模式(Chain of Responsibility pattern)是一种行为设计模式,用于将请求从一个对象传递到另一个对象,直到找到能够处理请求的对象为止。

职责链模式通常涉及一系列处理对象,每个对象都负责处理请求的一部分,并将请求传递给下一个对象,直到请求得到满足或者处理结束。这种方式可以将系统中的不同操作解耦,从而提高系统的灵活性和可维护性。

在 JavaScript 中,职责链模式的实现通常涉及使用一个处理对象的链表,其中每个对象都有一个指向下一个对象的引用。当请求进入系统时,它首先被传递给链表中的第一个对象。如果这个对象不能处理请求,则将请求传递给链表中的下一个对象,直到找到能够处理请求的对象为止。

下面是一个简单的 JavaScript 职责链模式的示例:

class Handler {  constructor() {    this.nextHandler = null;  }  setNextHandler(handler) {    this.nextHandler = handler;  }  handleRequest(request) {    if (this.nextHandler) {      this.nextHandler.handleRequest(request);    }  }}class ConcreteHandler1 extends Handler {  handleRequest(request) {    if (request === "request1") {      console.log("ConcreteHandler1 handles the request");    } else {      super.handleRequest(request);    }  }}class ConcreteHandler2 extends Handler {  handleRequest(request) {    if (request === "request2") {      console.log("ConcreteHandler2 handles the request");    } else {      super.handleRequest(request);    }  }}const handler1 = new ConcreteHandler1();const handler2 = new ConcreteHandler2();handler1.setNextHandler(handler2);handler1.handleRequest("request1"); // Output: "ConcreteHandler1 handles the request"handler1.handleRequest("request2"); // Output: "ConcreteHandler2 handles the request"handler1.handleRequest("request3"); // Output: Nothing is printed

在上面的示例中,`Handler` 类是职责链模式的基类,它包含一个指向下一个处理对象的引用。`ConcreteHandler1` 和 `ConcreteHandler2` 类是具体的处理对象,它们根据请求的类型来决定是否能够处理请求。如果不能处理,则将请求传递给下一个处理对象。最后,我们将 `handler1` 对象的下一个处理对象设置为 `handler2` 对象,然后依次调用 `handleRequest` 方法来模拟不同类型的请求。

关键词: