职责链(Chain of Responsibility)模式:使多个对象都有机会处理请求,从而避免请求发送者呵接受者之间的耦合关系。

将这个对象连成一条链子,并沿着这条链传递该请求,知道有一个对象处理它。

/*
* 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。
    这个角色通常由一个抽象类或接口实现。
* 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
    由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
*/

在抽象处理者(Handler) 设置继任者:

       protected Handler successor; // 方法public void SetSuccessor(Handler successor){this.successor = successor;}

以便于找到下一个人。

 // 设置链的责任Handler h1 = new ConcreteHandler1();Handler h2 = new ConcreteHandler2();Handler h3 = new ConcreteHandler3();h1.SetSuccessor(h2);h2.SetSuccessor(h3);// 生成和处理请求int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 };foreach (int request in requests)h1.HandleRequest(request);Console.WriteLine("\n==================\n");/// <summary>/// 抽象处理者(Handler)角色/// </summary>public abstract class Handler{protected Handler successor; // 方法public void SetSuccessor(Handler successor){this.successor = successor;}abstract public void HandleRequest(int request); }/// <summary>/// 具体处理者1/// </summary>public class ConcreteHandler1 : Handler{//从写基类 方法public override void HandleRequest(int request){if (request >= 0 && request < 10)Console.WriteLine("{0} handled request {1}",this, request);elseif (successor != null)successor.HandleRequest(request);}}/// <summary>/// 具体处理者2/// </summary>public class ConcreteHandler2 : Handler{public override void HandleRequest(int request){if (request >= 10 && request < 20)Console.WriteLine("{0} handled request {1}",this, request);elseif (successor != null)successor.HandleRequest(request);}}// 具体处理者3class ConcreteHandler3 : Handler{public override void HandleRequest(int request){if (request >= 20 && request < 30)Console.WriteLine("{0} handled request {1}",this, request);elseif (successor != null)successor.HandleRequest(request);}}

转载于:https://www.cnblogs.com/dragon-L/p/3791542.html

职责链(Chain of Responsibility)模式相关推荐

  1. 职责链( Chain of Responsibility)模式

    职责链( Chain of Responsibility)模式 职责链模式动机(Motivation) ➢在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指 ...

  2. java使命召唤_Java设计模式之从[使命召唤等游戏的任务提示]分析职责链(Chain Of Responsibility)模式...

    我们在使命召唤.暗黑破坏神等游戏时,总会接到各种各样的游戏任务,如到某某地方解救某人,或者消灭某某地方的敌人等.当玩家进入到某一个地图(以下称之为游戏场景)时,我们就可以查看它的任务提示.在这个机制下 ...

  3. 设计模式学习笔记——责任链(Chain of Responsibility)模式

    设计模式学习笔记--责任链(Chain of Responsibility)模式 @(设计模式)[设计模式, 责任链模式, chain of responsibility] 设计模式学习笔记责任链Ch ...

  4. 推卸责任的 Chain of Responsibility模式

    文章目录 Chain of Responsibility模式 应用场景 本质 优点 缺点 角色 Chain of Responsibility模式的类图 示例程序 示例程序的类图 示例代码 拓展思路 ...

  5. Chain of Responsibility 模式-----推卸责任模式

    >> ----- 当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任. 在这种情况下,我们可以考虑将多个对象组成一条职责链,然后按照它们的职责链上的顺序 ...

  6. 源码解析——FilterChain是职责链(过滤器)模式的典型应用

    源码解析 在javaWeb应用开发中,FilterChain是职责链(过滤器)模式的典型应用,以下是Filter的模拟实现分析: Request.java package com.itheima.pa ...

  7. 责任链模式(Chain of Responsibility模式)

    在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程等.公司员工请假,可批假的领导有部门负责人.副总经理.总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的 ...

  8. 行为模式之Chain of Responsibility模式

    1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2.适用性 在以下条件下使用Responsi ...

  9. Chain of Responsibility模式——读书笔记

    继承如下抽象类的一系列类 abstract class Handler { protected Handler next; Handler(Handler next) { this.next = ne ...

  10. 设计模式之职责链模式(Chain of Responsibility)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. dom4j生成、解析xml
  2. cpu线程_记w3wp占用CPU过高解决过程Dictionary线程安全
  3. 详细推导PCA算法(包括算法推导必备的知识)
  4. windows bat 批处理 !vm 合并快播文件
  5. 关系数据库第一第二第三范式
  6. 在SQL Server 2005中实现异步触发器架构
  7. 数电/数字电子技术基础全面知识点及习题总结(看这一篇就够了!!!)
  8. 计算机网络有线电视网和电话网区别,计算机网络习题答案
  9. 【你们项目组有几个测试,你负责什么,迭代了几个版本,迭代周期,写了多少测试用例?】
  10. 程序员如何准备简历以及面试的要求
  11. MVX-Net: Multimodal VoxelNet for 3D Object Detection
  12. 微信测试号中被动消息回复的测试
  13. [转]Windows CE 6.0(PB6)离线安装版下载
  14. word 全部更新域
  15. Golang pprof简介
  16. HashMap和Iterator迭代器的小用法
  17. 【苹果CMS技术教程】苹果CMSV10怎么更换模板
  18. 常用技巧精选(一)尺取法
  19. 自动驾驶专业名词简写简写缩写
  20. 【安全乐观主义点评】IAST 在去哪儿 Q-SDL 体系中的应用

热门文章

  1. 水滴状的自定义视图,让您摆脱单调的Dialog
  2. Cacti中文版在Centos5(Rhel5)上的安装(转载)
  3. Android 防止button多次点击总结
  4. 为什么JDK6中的substring()方法会导致内存泄露?
  5. vue.js动态组件:is特性
  6. python点击网页元素_ios+python 简单的查找页面元素并点击,点击的时候出现问题,求指点...
  7. python怎么用matplotlib_python-无法在我的程序中使用matplotlib函数
  8. ARM指令计算机器码,ARM中几种把BL指令转化为机器码算法
  9. python语言的核心理念是_Python编程语言的核心是什么?
  10. if函数判断单元格颜色_IF条件函数10大用法完整版,全会是高手,配合SUMIF,VLOOKUP更逆天...