职责链模式(Chain of Responsibility  Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

模式角色与结构:

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CSharp.DesignPattern.ResponsibilityChainPattern
{
class Program
{
static void Main(string[] args)
{
// 需要注意,职责链模式并不创建职责链,职责链的创建工作必须由系统的其他部分来完成,
// 一般是在使用该职责链的客户端中创建职责链。
Handler annal = new Director();
Handler tony = new VicePresident();
Handler marc = new President();
Handler meeting = new Congress(); annal.SetSuccessor(tony);
tony.SetSuccessor(marc);
marc.SetSuccessor(meeting); Console.WriteLine("Request: President");
annal.HandleRequest("President"); Console.ReadLine();
}
} // 抽象处理类
abstract class Handler
{
protected Handler successor; // 维持对下家的引用 public void SetSuccessor(Handler successor)
{
this.successor = successor;
} public abstract void HandleRequest(String request);
} // 具体处理类
class Director : Handler
{
public override void HandleRequest(string request)
{
if (request == "Director")
{
Console.WriteLine("Director Handle...");
}
else
{
this.successor.HandleRequest(request); // 体现职责链
}
}
} // 具体处理类
class VicePresident : Handler
{
public override void HandleRequest(string request)
{
if (request == "VicePresident")
{
Console.WriteLine("VicePresident Handle...");
}
else
{
this.successor.HandleRequest(request); // 体现职责链
}
}
} // 具体处理类
class President : Handler
{
public override void HandleRequest(string request)
{
if (request == "President")
{
Console.WriteLine("President Handle...");
}
else
{
this.successor.HandleRequest(request); // 体现职责链
}
}
} // 具体处理类
class Congress : Handler
{
public override void HandleRequest(string request)
{
if (request == "Congress")
{
Console.WriteLine("Congress Handle...");
}
else
{
this.successor.HandleRequest(request); // 体现职责链
}
}
}
}

最新文章

  1. mac brew install redis 报错
  2. Android studio 中的配置编译错误总结
  3. JAVA入门第二季 第一章 类和对象
  4. swift1.2语言函数和闭包函数介绍
  5. mysql 选择性高
  6. python字符串连接的三种方法及其效率、适用场景详解
  7. HttpServletRequest 报错 myeclipese支持tomcat
  8. Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)
  9. 第14章 Linux开机详细流程
  10. WaitForXXX等待无效句柄
  11. 关于String类型中==和equals的区别。
  12. 【转载】C#工具类:FTP操作辅助类FTPHelper
  13. 补充的flask实例化参数以及信号
  14. 彻底理解this 的值到底是什么?
  15. TensorFlow+Keras 03 TensorFlow 与 Keras 介绍
  16. mongodb安装及配置
  17. tomcat tomcat-user.xml被还原
  18. Linux性能优化 第四章 性能工具:特定进程CPU
  19. JAVA程序 从命令行接受多个数字,求和之后输出结果
  20. SpringBoot之actuator

热门文章

  1. C# winForm里窗体嵌套
  2. 让你提前认识软件开发(17):makefile文件的书写及应用
  3. java代码 分解EXCEL(一)
  4. ZOJ3819 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江司A称号 Average Score 注册标题
  5. iOS编程之前
  6. Singleton模式(Singleton创建类型)c#简单的例子
  7. linux内存操作--ioremap和mmap学习笔记
  8. android 处理器crash刊物
  9. 设计模式模式游客(Visitor)摘录
  10. 创建高性能移动 web 站点【转载】