第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>    class Context    {        public Context(int day)        {            this.day = day;        }        private int day;        public int Day        {            get { return day; }            set { day = value; }        }    }    /// <summary>    /// 抽象基类    /// </summary>    abstract class Handler    {        public Handler(string name)        {            _name = name;        }        private string _name;        public string Name        {            get { return _name; }            set { _name = value; }        }        private Handler _handler;        public Handler handler        {            get { return _handler; }            set { _handler = value; }        }        //是否通过        public abstract bool Pass(Context context);    }    /// <summary>    /// 部门经理 2天以下的部门签字就成了    ///     /// </summary>    class Manager:Handler    {        public Manager(string name)            : base(name)        { }        public override bool Pass(Context context)        {            if (context.Day <= 2)            {                Console.Write("{0}已经签字通过", Name);                return true;             }            return handler.Pass(context);        }    }    /// <summary>    /// 总经理 2天以上需要总经理签字    /// </summary>    class GeneralManager : Handler    {        public GeneralManager(string name)            : base(name)        { }        public override bool Pass(Context context)        {            if (2<context.Day )            {                Console.Write("{0}已经签字通过", Name);                return true;            }            return handler.Pass(context);        }    }    /// <summary>    /// 董事长 7天以上需要总经理签字    /// </summary>    class President : Handler    {        public President(string name)            : base(name)        { }        public override bool Pass(Context context)        {            if ( context.Day > 7)            {                Console.Write("{0}已经签字通过",Name);                return true;            }            return handler.Pass(context);        }    } | 
客户端调用
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
 | 
    class Program    {        static void Main(string[] args)        {            Context context = new Context(3);            Handler manager = new Manager("部门经理");            Handler gmanager = new GeneralManager("总经理");              Handler president = new President("董事长");            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 ...