CSharp设计模式读书笔记(14):职责链模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)
职责链模式(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); // 体现职责链
}
}
}
}
CSharp设计模式读书笔记(14):职责链模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)的更多相关文章
- atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换
atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...
- 设计模式的征途—14.职责链(Chain of Responsibility)模式
相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新 ...
- 重温设计模式(三)——职责链模式(chain of responsibility)
一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...
- js设计模式(12)---职责链模式
0.前言 老实讲,看设计模式真得很痛苦,一则阅读过的代码太少:二则从来或者从没意识到使用过这些东西.所以我采用了看书(<js设计模式>)和阅读博客(大叔.alloyteam.聂微东)相结合 ...
- C#设计模式之二十一职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中 ...
- C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲“行为型”设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例子吧,理解起来可能更 ...
- 设计模式 --> (15)职责链模式
职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 示例 考虑员工要求加薪.公司的管理者一共有 ...
- JS设计模式(10)职责链模式(重要)
什么是职责链模式? 重要性:4 星,在项目中能对 if-else 语句进行优化 定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到 ...
- CSharp设计模式读书笔记(24):访问者模式(学习难度:★★★★☆,使用频率:★☆☆☆☆)
模式角色与结构: 示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
随机推荐
- 开源备份软件bacula安装记录--包括备份-恢复演练
该公司原先使用的备用机oracle-linux 5.7 不是很稳定执行.经常死机,新安装centos6.5, 即用bacula要备份的数据.在这里,有关安装故障记录,MEMO. 操作系统:centos ...
- 在线maven
仓库
findmaven.net是一个查找Jar和查找Maven的Maven仓库搜索引擎.它能够依据Java开发人员提供的Class名或者Jar名找到包括它的Jar,同一时候提供Jar的Maven仓库链接, ...
- cocos2dx-2.x CCFileUtils文件管理分析(2)
于1于,我只是对整体结构进行了分析,然后,2于,我会在一些我们经常使用的分析功能. //获取给定文件名称的全路径 //以下这非常长一段凝视.通过举样例,像我们说明cocos2dx获取文件全路径的规则. ...
- Android - 用Fragments实现动态UI - 创建灵活的UI
当设计程序来支持各种不一样的屏幕尺寸时,可以在不同的布局中重用fragment来根据可用的屏幕大小来优化用户体验. 例如,在手机上可能使用一个fragment来使用单窗口用户体验比较合适.但是,你可能 ...
- 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)
1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...
- Intent用法
Intent是android系统中的最佳男主角,Intent翻译成中文的意思是"意图",说白了就是"我想要...",也就是说眼下运行中的Activity想要请其 ...
- dwz 照片回头处理
我的要求.要选择封面文章,回头一看,实现,查找回头功能bringBack代码中发现的,它们朝着input 标签处理,所以img总是标签不能显示,这么dwz源所做的更改,于dwz.databases.j ...
- 玩转Web之Jsp(二)-----jsp中怎么使用CKEditor
在BBS项目或其他一些项目中,我们会发现别人写的一些文本域非常漂亮,而且有多种功能,这是怎么做到的呢?其实通过在jsp文件中引用在线编辑器即可,这里以CKEditor为例. 首先下载CKEditor: ...
- 2C 产品的本质是人性,2B 产品的背后是业务(转)
本文作者李源是 BLUES 原来做 YY 语音客户端产品时候的同事,原来针对 YY 语音的游戏用户做 2C 的 PC 客户端产品和 APP,后来到某品牌手机做 2B 的后台系统.以下文章,是作者经历了 ...
- centos下一个bash: XXX: command not found解决方案
最近想centos通过做Android工程建设.配置jdk和Android sdk后,也同时/etc/profile将java和Android环境变量配置成,但它不能像windows 在相同,直接使用 ...