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; ...
随机推荐
- ComboBox 自动调整组合框下拉部分的宽度
/// <summary> /// ComboBox 自动调整组合框下拉部分的宽度 /// </summary> void Resiz ...
- 浅谈web网站架构演变过程(转)
前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...
- SQL_substr功能测试
原创作品.从 "深蓝blog" 博客,欢迎转载,请务必注明转载的来源.权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/articl ...
- FireFox VS Chrome 之 调试篇
一个完美的调试工具,FireBug! 精确跟踪每一步.仅仅要按下图所看到的,选择"脚本",然后在下方选择脚本所在的文件就可以对该文本的运行进行断点跟踪. 而且仅当一个线程运行结束后 ...
- Unit of Work
ABP使用及框架解析系列 - [Unit of Work part.2-框架实现] 前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:ht ...
- 数据结构(C达到)------- 双链表
双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int El ...
- React.js入门笔记 创建hello world 的6种方式
一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站. ...
- curl转让query string逃生参数
假设curl访问http网站.传递参数.需要使用\如&字首. 例: http://myjenkins/job/run_schedule/buildWithParameters?token=fe ...
- iOS开发无第三方控件的援助达到的效果侧边栏
最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hu ...
- Path和ClassPath差异
1.Path角色 Path它用于指定Java路径的命令,当我们想编译Java当需要使用的程序javac.exe并运行.class当文件需要使用java.exe,此时Path设置的路径就发生作用了.由于 ...