翼度科技»论坛 编程开发 JavaScript 查看内容

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

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
职责链模式(Chain of Responsibility pattern)是一种行为设计模式,用于将请求从一个对象传递到另一个对象,直到找到能够处理请求的对象为止。
职责链模式通常涉及一系列处理对象,每个对象都负责处理请求的一部分,并将请求传递给下一个对象,直到请求得到满足或者处理结束。这种方式可以将系统中的不同操作解耦,从而提高系统的灵活性和可维护性。
在 JavaScript 中,职责链模式的实现通常涉及使用一个处理对象的链表,其中每个对象都有一个指向下一个对象的引用。当请求进入系统时,它首先被传递给链表中的第一个对象。如果这个对象不能处理请求,则将请求传递给链表中的下一个对象,直到找到能够处理请求的对象为止。
下面是一个简单的 JavaScript 职责链模式的示例:
  1. class Handler {
  2.   constructor() {
  3.     this.nextHandler = null;
  4.   }
  5.   setNextHandler(handler) {
  6.     this.nextHandler = handler;
  7.   }
  8.   handleRequest(request) {
  9.     if (this.nextHandler) {
  10.       this.nextHandler.handleRequest(request);
  11.     }
  12.   }
  13. }
  14. class ConcreteHandler1 extends Handler {
  15.   handleRequest(request) {
  16.     if (request === 'request1') {
  17.       console.log('ConcreteHandler1 handles the request');
  18.     } else {
  19.       super.handleRequest(request);
  20.     }
  21.   }
  22. }
  23. class ConcreteHandler2 extends Handler {
  24.   handleRequest(request) {
  25.     if (request === 'request2') {
  26.       console.log('ConcreteHandler2 handles the request');
  27.     } else {
  28.       super.handleRequest(request);
  29.     }
  30.   }
  31. }
  32. const handler1 = new ConcreteHandler1();
  33. const handler2 = new ConcreteHandler2();
  34. handler1.setNextHandler(handler2);
  35. handler1.handleRequest('request1'); // Output: "ConcreteHandler1 handles the request"
  36. handler1.handleRequest('request2'); // Output: "ConcreteHandler2 handles the request"
  37. handler1.handleRequest('request3'); // Output: Nothing is printed
复制代码
 
在上面的示例中,`Handler` 类是职责链模式的基类,它包含一个指向下一个处理对象的引用。`ConcreteHandler1` 和 `ConcreteHandler2` 类是具体的处理对象,它们根据请求的类型来决定是否能够处理请求。如果不能处理,则将请求传递给下一个处理对象。最后,我们将 `handler1` 对象的下一个处理对象设置为 `handler2` 对象,然后依次调用 `handleRequest` 方法来模拟不同类型的请求。

来源:https://www.cnblogs.com/ronaldo9ph/p/17210324.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具