设计模式学习总结(十)责任链模式(Chain Of Responsibility)
责任链主要指通过一连串的操作来实现某项功能或者在处理相关的业务时,对于自己的业务则进行处理,反之,对于不属于自己的业务,则进行下发!
一、示例展示:
以下例子主要通过对煤矿对井下警告信息的处理来进行说明,如果瓦斯浓度超出一定范围值时,某个系统会自动发送短信到矿井的值班领导手机上,如果超出范围继续扩大,会向上一级继续发送,直到发送到矿领导的手机上!
1. 创建抽象处理者角色(Handler):Leader
public abstract class Leader
{
protected string LeaderName;
protected Leader leader; public Leader(string LeaderName)
{
this.LeaderName = LeaderName;
} public void SetSuperiorLeader(Leader leader)
{
this.leader = leader;
} abstract public void ProcessAlert(int AlertValue);
}
2. 创建具体处理者角色(Concrete Handler): OnDutyLeader
public class OnDutyLeader : Leader
{
public OnDutyLeader(string LeaderName) : base(LeaderName)
{
} public override void ProcessAlert(int AlertValue)
{
if (AlertValue <= )
{
Console.WriteLine("Onduty leader is processing!");
}
else
{
leader.ProcessAlert(AlertValue);
}
}
}
3. 创建具体处理者角色(Concrete Handler): DepartmentLeader
public class DepartmentLeader : Leader
{
public DepartmentLeader(string LeaderName) : base(LeaderName)
{
}
public override void ProcessAlert(int AlertValue)
{
if (AlertValue <= )
{
Console.WriteLine("Department leader is processing!");
}
else
{
leader.ProcessAlert(AlertValue);
}
}
}
4. 创建具体处理者角色(Concrete Handler): SuperLeader
public class SuperLeader : Leader
{
public SuperLeader(string LeaderName) : base(LeaderName)
{
} public override void ProcessAlert(int AlertValue)
{
Console.WriteLine("The super leader is processing!");
}
}
5. 客户端调用:
class Program
{
static void Main(string[] args)
{
OnDutyLeader leaderA = new OnDutyLeader("LeaderA");
DepartmentLeader leaderB = new DepartmentLeader("LeaderB");
SuperLeader leaderC = new SuperLeader("LeaderC"); leaderA.SetSuperiorLeader(leaderB);
leaderB.SetSuperiorLeader(leaderC); leaderA.ProcessAlert();
leaderA.ProcessAlert();
leaderA.ProcessAlert(); Console.ReadLine();
}
}
二、策略模式设计理念:
通过抽象具体处理者的共同的方法与属性,形成了抽象处理者角色。根据已经创建的具体处理者对象,设置对象相互之间的依赖关系,进而将各个对象串联在整个责任链之上,达到逐级处理的目地!
三、角色及关系:

设计模式学习总结(十)责任链模式(Chain Of Responsibility)的更多相关文章
- 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern) 介绍为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直 ...
- 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)
原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of R ...
- atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换
atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...
- 责任链模式-Chain of Responsibility(Java实现), 例2
责任链模式-Chain of Responsibility 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. 咱们在 ...
- 责任链模式-Chain of Responsibility(Java实现), 例1
责任链模式-Chain of Responsibility, 例1 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. ...
- 《JAVA设计模式》之责任链模式(Chain of Responsibility)
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- 责任链模式/chain of responsibility/行为型模式
职责链模式 chain of responsibility 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处 ...
- 设计模式之二十:责任链模式(Chain of Responsibility)
感觉这个设计模式和组合模式一样是一种非常巧妙的设计模式,在须要使用它的地方假设不使用这样的设计模式代码会变的非常复杂,可是这样的设计模式的基本原理又是非常easy的. 责任链模式: 通过使多个对象都有 ...
- C#设计模式-责任链模式(Chain of Responsibility Pattern)
引子 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现.现在以请假流程为例,一般公 ...
- 23种设计模式--责任链模式-Chain of Responsibility Pattern
一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...
随机推荐
- css总结7:盒子模型理解
1 盒子模型 1.1盒子模型的盒子: 以博客园页面为例: 1.2盒子内部构造:边框(border).内容(content).填充(padding).边界(margin)---CSS盒子模式都具 ...
- javaScript入门之常用事件
JS中的常用事件 onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适. onclick/ondblclick:鼠标单击和双击事件 onkeydown/onkeypress:搜索引擎 ...
- windows phone制作引导页
适用于WP7 WP8+ 源码下载撸这里 制作动画gif小软件下载 小技巧 ①图片是纯色背景:将页面设置跟图片背景一样颜色 ②图片是渐变or其他,切图时候:单独切背景(页面设置这个为背景)跟图片里面元素 ...
- 使用VS Code开发C++
1. 参考/转载 vs code进行c/c++开发 VSCode 的第一个C++程序(windows)[更新2018.10.28] 2. C++开发相关插件(扩展商店中直接搜索) 至少要装C/C++. ...
- WinForm中ListView的使用
每一行是一个ListViewItem对象,每一项是一个ListViewSubItem对象 样式 整行选择:this.lvDataSourceSearchHistory.FullRowSelect = ...
- 20165219 2017-2018-2 《Java程序设计》第9周学习总结
20165219 2017-2018-2 <Java程序设计>第9周学习总结 课本知识总结 URL类 URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户端程 ...
- 【转】c# delegate
源地址:https://www.cnblogs.com/lcawen/p/6645358.html
- [51nod1236] 序列求和 V3(斐波那契数列)
题面 传送门 题解 把求和的柿子用斐波那契数列的通项公式展开 \[ \begin{aligned} Ans &=\sum\limits_{i = 1}^{n} \left(\frac{(\fr ...
- 图层锁定vlisp函数高版本图元自动淡色显示
(defun c:tt(/ obj) (sk_layerLock (getvar "clayer") nil) (princ) ) ;;;name:sk_layerLock ;;; ...
- Python3之uuid模块
一. 简介 UUID是128位的全局唯一标识符,通常由32字节的字母串表示.它可以保证时间和空间的唯一性,也称为GUID. 全称为:UUID--Universally Unique IDentifie ...