读书笔记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
  • 189

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

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

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

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

"围观"设计模式(22)--行为型之职责链模式(Chain Of Responsibility Pattern)

责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式...

二十、职责链模式——设计模式学习笔记

职责连模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。...

设计模式学习笔记---职责链模式chain of responsibility(Java版)

创建型模式:关注对象的创建工程。 结构型模式:关注对象和类的组织。 行为型模式:关注系统中对象的相互交互研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。...

设计模式学习笔记--职责链模式

一.简介 说道职责链模式可能比较陌生,但是我们在工作生活中经常会遇到职责链。比如我最近有事,要请一天的假,那么我在系统上提交一个申请。如果这个假期很短,可能直接上级就批复了。但是如果假期比较长,直接上...

设计模式笔记18:职责链模式(Chain of Responsibility Pattern)

一、责任链模式的内容 职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链...

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

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

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

一、 职责链(Chain of Responsibility)模式 责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记22:职责链模式
举报原因:
原因补充:

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