读书笔记22:职责链模式

原创 2012年03月26日 16:53:15

1、定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到对象处理它为止。
    相信大家都写过if...else或者switch,当条件很多时需要写上数十行代码。如果要修改某些条件或者处理过程,就又要不断地修改这个牛叉的分支语句。这时我们可以采用职责链模式,它是将许多请求的分支或者步骤都独立出来。然后每个独立出来的部分,如果你是最终的处理那么就直接处理并结束,如果不是,那么就连接下一个处理步骤。这样就形成一个处理请求的链条。
2、角色
Handler——处理请求的接口。
CreateHandler——实现处理请示的接口的类。它可以有很多个,每一个代表一个处理步骤,并且当不满足它的条件时,会将请求交给另一个步骤。保证这个链条不能中断。
3、程序模型:
抽象接口

    public abstract class Handler
    {
        protected Handler successor;

        public void SetSuccessor(Handler successor)
        {
            this.successor = successor;
        }

        public abstract void HandlerRequest(object request);
    }

具体实现类,是完整职责链的一个环节。

    public class CreateHandler0 : Handler
    {
        public override void HandlerRequest(object request)
        {
            string value = request as String;

            Regex regex = new Regex(@"[\u4e00-\u9fa5]", RegexOptions.IgnoreCase);

            if (regex.IsMatch(value))
            {
                Console.WriteLine(string.Format(@"'{0}' 是汉字", value));
            }
            else
            {
                successor.HandlerRequest(request);
            }
        }
    }

    public class CreateHandler1 : Handler
    {
        public override void HandlerRequest(object request)
        {
            string value = request as String;

            Regex regex = new Regex(@"^\d+$", RegexOptions.IgnoreCase);

            if (regex.IsMatch(value))
            {
                Console.WriteLine(string.Format(@"{0}  是数字", int.Parse(value)));
            }
            else
            {
                successor.HandlerRequest(request);
            }
        }
    }

    public class CreateHandler2 : Handler
    {
        public override void HandlerRequest(object request)
        {
            Console.WriteLine(string.Format(@"{0} 既不是汉字也不是数字。",request));
        }
    }

调用:

  static void Main(string[] args)
        {
            Handler handler0 = new CreateHandler0();

            Handler handler1 = new CreateHandler1();

            Handler handler2 = new CreateHandler2();

            handler0.SetSuccessor(handler1);

            handler1.SetSuccessor(handler2);

            string string1 = "中国";

            string string2 = "110";

            string string3 = "++--";

            Console.WriteLine("测试:{0}",string1);

            handler0.HandlerRequest(string1);

            Console.WriteLine("测试:{0}", string2);

            handler0.HandlerRequest(string2);

            Console.WriteLine("测试:{0}", string3);

            handler0.HandlerRequest(string3);

            Console.Read();
        }

 

这样,对请求步骤可以随时的增加或者修改,增强了处理对象的灵活性。从结构上来看有些类似于建造者模式,都是将步骤分离出来。只是建造者不需要指向后一个。
模型代码:
http://download.csdn.net/detail/yysyangyangyangshan/4173863

版权声明:本文为博主原创文章,未经博主允许不得转载。

读书笔记22:职责链模式

1、定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到对象处理它为止。     相信大家都写过if...else或者sw...
  • nodeman
  • nodeman
  • 2015年07月31日 10:12
  • 202

状态模式 VS 职责链模式

这次合作开发过程中我们使用了一些设计模式,经过讨论对其理解深刻不少。之前在学习之中,我本以为自己已经理解了一些设计模式。但在这次的使用过程中,因为各自的理解不一造成了一定的碰撞,之后才发现自己的理解根...
  • zhuojiajin
  • zhuojiajin
  • 2013年12月05日 11:09
  • 2570

【学习笔记javascript设计模式与开发实践(职责链模式)----13】

第13章 职责链模式 职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它为止。 职责链模式的名字...
  • pigpigpig4587
  • pigpigpig4587
  • 2015年12月31日 16:23
  • 721

职责链设计模式解决if else多分支问题

具体方案具体分析,此代码适合分类业务进行的if else操作,解决多分支问题 //方案一:职责链设计模式 #include #include #include #include us...
  • mafuli007
  • mafuli007
  • 2012年10月29日 19:04
  • 2244

《大话设计模式》-- 第24个 职责链模式

此时学设计模式只能有个大致的了解,不能理解其到底要用在何处,但是先大概根据书中描述留个简单的印象,以后在设计代码时可以有点印象,遇到具体的问题可以类比实践下。 今天学习一下《大话设计模式》中的第24...
  • anbreakdy
  • anbreakdy
  • 2016年10月28日 00:02
  • 127

设计模式读书笔记-----职责链模式

去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985、211的娃呢),但是对于某些人来说就是福音了。大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不...
  • chenssy
  • chenssy
  • 2013年09月21日 21:46
  • 4888

《设计模式 ● 责任链》之业务场景

/************************************************************************************************** ...
  • webwalker
  • webwalker
  • 2012年03月21日 16:29
  • 4620

【C#设计模式-责任链模式】

一.责任链模式的定义: 责任链模式指的是——某个请求需要多个对象进行处理,从而避免请求的发送者和接收之间的耦合关系。将这些对象连成一条链子,并沿着这条链子传递该请求,直到有对象处理它为止。 二.责任链...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年05月11日 11:46
  • 871

用代码和UML图化解设计模式之《责任链模式》

责任链模式,用我的理解就是动作的处理链表。根据请求的不同类型,在链表查找相应类型的处理者。处理者是一个链表。 wiki上说明 wikipedia的定义为:CoR pattern consists ...
  • wallwind
  • wallwind
  • 2012年11月06日 20:20
  • 2130

java设计模式系列--职责链模式

http://sishuok.com/forum/blogPost/list/5813.html FYI23.1 场景问题23.1.1 申请聚餐费用来考虑这样一个功能:申请聚餐费用的管理。 很多公...
  • lucas421634258
  • lucas421634258
  • 2015年10月18日 23:34
  • 317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记22:职责链模式
举报原因:
原因补充:

(最多只允许输入30个字)