职责链(Chain of Responsibility)模式
来源:互联网 发布:手机数据怎么连接电脑 编辑:程序博客网 时间:2024/04/27 16:04
一、 职责链(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(); } }}
结果截图:
类图:
关系图:
- 职责链模式(Chain of Responsibility)
- Chain of Responsibility(职责链模式)
- 职责链(Chain of Responsibility)模式
- 职责链模式(Chain Of Responsibility)
- 职责链模式(Chain of Responsibility)
- 职责链模式(Chain of Responsibility)
- Chain Of Responsibility(职责链)模式
- 职责链模式(Chain Of Responsibility)
- 职责链(Chain of Responsibility)模式
- 职责链模式(Chain of Responsibility)
- 职责链模式(Chain of Responsibility)
- 职责链模式(Chain of Responsibility)
- 职责链模式(Chain Of Responsibility)
- 职责链模式(Chain of Responsibility)
- 职责链(Chain of responsibility)模式
- Java模式 - Chain of Responsibility(职责链模式)
- 设计模式-职责链模式(chain of Responsibility)
- 设计模式:行为模式:职责链(chain of responsibility)
- SG-UAP weblet的使用
- 12位早起的IT大佬们让小伙伴们都惊呆了
- C#学习笔记06:类继承
- Python 3语法小记(六)条件、循环和assert、pass、del
- poj 1236 Network of Schools 强连通分量
- 职责链(Chain of Responsibility)模式
- S3C6410学习笔记汇总
- activity跳转动画
- Android GDI 图形渲染
- Android中View not attached to window manager错误的解决办法
- SDKD Single training #6未完成题目
- UVA 408 (13.07.28)
- UITableView简单解析
- poj2187