职责链(Chain of Responsibility)模式
模式 of 职责 Chain
2023-09-27 14:23:51 时间
一、 职责链(Chainof Responsibility)模式
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
二、 责任链模式的结构
责任链模式涉及到的角色如下所示:
抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。
具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
模式理解图:
示例源代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chain_of_Responsibility { abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } abstract public void HandleRequest(int request); } //ConcreteHandler1 class ConcreteHandler1 : Handler { override public void HandleRequest(int request) { if (request >= 0 && request < 10) { Console.WriteLine("{0} handled request {1}", this, request); } else if (successor != null) successor.HandleRequest(request); } } class ConcreteHandler2 : Handler { public override void HandleRequest(int request) { //throw new NotImplementedException(); if (request >= 10 && request < 20) Console.WriteLine("{0} handled request {1}", this, request); else if (successor != null) successor.HandleRequest(request); } } class ConcreteHandler3 : Handler { public override void HandleRequest(int request) { //throw new NotImplementedException(); if (request >= 20 && request < 30) { Console.WriteLine("{0} handled request {1}", this, request); } else if (successor != null) { successor.HandleRequest(request); } } } class Program { static void Main(string[] args) { Handler h1 = new ConcreteHandler1(); Handler h2 = new ConcreteHandler2(); Handler h3 = new ConcreteHandler3(); h1.setSuccessor(h2); h2.setSuccessor(h3); h3.setSuccessor(h1); //像一条链路,每个对象都有对下一个对象的引用。 int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 }; foreach (int request in requests) h1.HandleRequest(request); Console.ReadKey(); } } }
结果截图:
类图:
关系图:
相关文章
- C3:建造者模式 Builder
- 阿里Sentinel核心源码解析-责任链模式最佳实践(下)
- 设计模式实战-状态模式(State Pattern)
- 原型模式 (学习笔记4)
- 【计算机视觉】纹理特征之LBP局部二值化模式
- Java设计模式-责任链模式(Chain of Responsibility)
- 内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式.
- 解析大型.NET ERP系统 分布式应用模式设计与实现
- 设计模式之单例模式
- 读书笔记_java设计模式深入研究 第三章 工厂模式 Factory
- js--设计模式--适配器模式
- 重温设计模式(三)——职责链模式(chain of responsibility)
- Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- 用原生javascript实现最简单的发布者-订阅者模式
- 观察者模式-不太理解