第22章 职责链模式(Chain of Responsibility)
原文 第22章 职责链模式(Chain of Responsibility)
职责链模式
导读:职责链模式是一个既简单又复杂的设计模式,刚开始学习这个设计模式的时候光示例都看了好几遍。就为了理清里面的逻辑走向。是个值得慢慢品味的设计模式
概述:
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
结构图:

代码举例:公司请假
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |   /// <summary>    /// 请求类 场景    /// </summary>    classContext    {        publicContext(intday)        {            this.day = day;        }        privateintday;        publicintDay        {            get{ returnday; }            set{ day = value; }        }    }    /// <summary>    /// 抽象基类    /// </summary>    abstractclassHandler    {        publicHandler(stringname)        {            _name = name;        }        privatestring_name;        publicstringName        {            get{ return_name; }            set{ _name = value; }        }        privateHandler _handler;        publicHandler handler        {            get{ return_handler; }            set{ _handler = value; }        }        //是否通过        publicabstractboolPass(Context context);    }    /// <summary>    /// 部门经理 2天以下的部门签字就成了    ///     /// </summary>    classManager:Handler    {        publicManager(stringname)            : base(name)        { }        publicoverrideboolPass(Context context)        {            if(context.Day <= 2)            {                Console.Write("{0}已经签字通过", Name);                returntrue;             }            returnhandler.Pass(context);        }    }    /// <summary>    /// 总经理 2天以上需要总经理签字    /// </summary>    classGeneralManager : Handler    {        publicGeneralManager(stringname)            : base(name)        { }        publicoverrideboolPass(Context context)        {            if(2<context.Day )            {                Console.Write("{0}已经签字通过", Name);                returntrue;            }            returnhandler.Pass(context);        }    }    /// <summary>    /// 董事长 7天以上需要总经理签字    /// </summary>    classPresident : Handler    {        publicPresident(stringname)            : base(name)        { }        publicoverrideboolPass(Context context)        {            if( context.Day > 7)            {                Console.Write("{0}已经签字通过",Name);                returntrue;            }            returnhandler.Pass(context);        }    } | 
客户端调用
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |     classProgram    {        staticvoidMain(string[] args)        {            Context context = newContext(3);            Handler manager = newManager("部门经理");            Handler gmanager = newGeneralManager("总经理");              Handler president = newPresident("董事长");            manager.handler = gmanager;            gmanager.handler = president;            manager.Pass(context);            Console.ReadLine();                  }    } | 
适用场景:
1、当一个方法的传入参数将成为分支语句的判断条件时;
     2、当每一个分支的职责相对独立,且逻辑较为复杂时;
     3、当分支条件存在扩展的可能时。
第22章 职责链模式(Chain of Responsibility)的更多相关文章
- atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换
		atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ... 
- 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)
		设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ... 
- 职责链模式(Chain of Responsibility)(对象行为型)
		1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ... 
- 责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)
		责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这 ... 
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)
		设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ... 
- 设计模式之职责链模式(Chain of Responsibility)摘录
		23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ... 
- 行为型设计模式之职责链模式(Chain of Responsibility)
		结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个 ... 
- 职责链模式(chain of responsibility)
		一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ... 
- 职责链模式(chain of responsibility Pattern)
		职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. •Handler: 抽象处理者:定义出一个 ... 
随机推荐
- POJ1469_COURSES(二部图最大匹配)
			解决报告 http://blog.csdn.net/juncoder/article/details/38136065 题目传送门 题意: n个学生p门课程,每一个学生学习0或1以上的课程. 问:能否 ... 
- Java equals的一个坑
			public class StringEqualsObject { public static void main(String[] args) { String name="Tom&quo ... 
- Linux下yum订购具体解释
			1.描述 yum = Yellow dog Updater, Modified/删除/更新RPM包.它能自己主动解决包的倚赖性问题.类似于Ubuntu的apt.它能便于管理大量系统的更新问题. 配置文 ... 
- Memcached全面剖析–5. memcached的应用和兼容程序
			作者:长野雅广(Masahiro Nagano) 原文链接:http://gihyo.jp/dev/feature/01/memcached/0005 我是Mixi的长野.memcached的连载最 ... 
- ATL 创COM物
			我原来以前写dll创建过程,而直接使用LoadLibrary加载动态库. 但ATL提出了一个非常重要的特点是引入COM对象的概念. 首先. ATL active template library该活动 ... 
- docker 真实---安装基本映像 (一)
			浸泡了几天的官方网站,正确docker有了更好的理解.准备着手建立一个公司的开发和测试环境,包含java.python. 环境介绍 首先说明一下我的环境 2物理server(以后简称为主机) 主机A配 ... 
- Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
			Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ... 
- android采用videoView播放视频(包装)
			//android播放视频.用法:于androidManifest.xml添加activity, // <activity android:name=".PlayVideo" ... 
- 阿里云+wordpress
			阿里云+wordpress搭建个人博客网站[小白专用的图文教程] [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源 ... 
- System.ComponentModel.BackgroundWorker在WinForm中的异步使用
			为了防止操作过程中界面卡死,和WinForm搭配最适合的就是BackgroundWorker了.BackgroundWorker 类 using System; using System.Compon ... 
