`

Chain of Responsibility Pattern

阅读更多

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

 

责任链模式相当于数据结构的链表一样,数据结构链表分为单项链表,双项链表,单项循环链表,双项循环链表.责任链模式就是这种行为的反映,它就是相当于将多个对象连成一条链,接着第一个对象收到一个请求该对象决定是否处理请求,如果该对象处理请求则处理请求,如果它不处理转到到二个对象,第二个重复第一个的过程,如果请求直接被它处理的话那么请求就结束了,以此类推.

 

适用性
1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定.

 

2.你想在不明确指定接收者的情况下,向多个对象中的一个,提交一个请求.
比如说我有一个链表其中有10个对象,那么我想对第五个对象提出请求,我只需要对链表的第一个对象发出一个请求,前四个

对象可以忽略掉该请求,最后又第五个来处理,客户端不知道到底是哪个对象去真正的处理了请求.

 

3.可处理一个请求的对象集合应被动态指定.
处理的请求是在运行时被动态指定的,并不是在编译时就指定好的.

 

构成:
1.传递者接口(Handler):
(1).定义一个处理请求的接口
(2).定义一个后继者的引用或通过子类实现(可选)

 

2.具体传递者(ConcreteHandler):可以访问链中下一个对象,如果可以处理请求,就处理它,否则将请求转发给后继者
具体传递者有相应的引用,这个引用会传递给下一个处理者.

 

3.客户端(Client):向链中的对象发出请求

 

ClassDiagram:

 

SequenceDiagram:

 

class Client
    {
        static void Main(string[] args)
        {
            Handler handlerA = new ConcreteHandlerA();
            Handler handlerB = new ConcreteHanlderB();
            Handler handlerC = new ConcreteHanlderC();

            handlerA.SetHanlder(handlerB);
            handlerB.SetHanlder(handlerC);

            int[] requests = { 15, 3, 22, 20, 18, 15 };

            foreach (int request in requests)
            {
                handlerA.HandlerRequest(request);
            }

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 抽象的传递者
    /// </summary>
    abstract class Handler
    {
        protected Handler handler;

        //定义后继者的引用
        public void SetHanlder(Handler handler)
        {
            this.handler = handler;
        }

        public abstract void HandlerRequest(int request);
    }

    /// <summary>
    /// 具体传递者A
    /// </summary>
    class ConcreteHandlerA : Handler
    {
        public override void HandlerRequest(int request)
        {
            if (request > 0 && request <= 10)
            {
                Console.WriteLine("{0} handlers {1}", this.GetType().Name, request);
            }
            else if (handler != null)
            {
                handler.HandlerRequest(request);
            }
        }
    }

    /// <summary>
    /// 具体传递者B
    /// </summary>
    class ConcreteHanlderB : Handler
    {
        public override void HandlerRequest(int request)
        {
            if (request > 10 && request <= 20)
            {
                Console.WriteLine("{0} handler {1}", this.GetType().Name, request);
            }
            else if (handler != null)
            {
                handler.HandlerRequest(request);
            }
        }
    }

    /// <summary>
    /// 具体传递者C
    /// </summary>
    class ConcreteHanlderC : Handler
    {
        public override void HandlerRequest(int request)
        {
            if (request > 20 && request <= 30)
            {
                Console.WriteLine("{0} handler {1}", this.GetType().Name, request);
            }
            else if (handler != null)
            {
                handler.HandlerRequest(request);
            }
        }
    }

 

总结:
其实责任链模式(职责链模式)就是构造一个链表,请求来了第一个对象处理不了转第二个,第二个处理不了转第三个,以此类推,直到转到处理该请求的对象.

  • 大小: 45.6 KB
  • 大小: 37.1 KB
分享到:
评论

相关推荐

    c++-设计模式之责任链模式(Chain of Responsibility Pattern)

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求的发送者和接收者解耦。通过将请求沿着处理链传递,直到有对象处理该请求为止,这种模式避免了请求发送者与具体处理者之间的紧...

    设计模式 - Chain of Responsibility Pattern(责任链模式)

    NULL 博文链接:https://linkcqu.iteye.com/blog/355806

    chain of responsibility.pptx

    责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有...

    chain of responsibility 职责链模式(行为模式)

    职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求的发送者和接收者解耦,使得多个对象都有可能处理一个请求,而无需显式指定接收者。在这个模式中,请求沿着一个处理者链进行传递,...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton ... 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    23种设计模式 (创建型,结构型,行为型)

    创建型: ... 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式代码——c#

    C#设计模式(23种设计...19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    用Java实现23种设计模式

    责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento ...

    设计模式PPT

     责任链模式(Chain of Responsibility Pattern)  命令模式(Command Pattern)  解释器模式(Interpreter Pattern)  迭代器模式(Iterator Pattern)  中介者模式(Mediator Pattern)  备忘录模式...

    C#设计模式-吕震宇

    设计模式(17)-Chain of Responsibility Pattern 设计模式(16)-Bridge Pattern 设计模式(15)-Facade Pattern 设计模式(14)-Flyweight Pattern C#设计模式(13)-Proxy Pattern C#设计模式(12)-...

    32种设计模式

    职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    33种JAVA设计模式DEMO

    责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) ...

    C++设计模式课件22_Chain Of Resposibility_职责链.pdf

    **职责链模式**(Chain of Responsibility Pattern)是一种行为设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个...

    C++面向对象23种设计模式实现源码DesignPattern.zip

    7. **责任链模式(Chain of Responsibility Pattern)**:责任链模式通过建立一个处理请求的链,使得请求可以在链上的对象间传递,直到被某个对象处理。21.责任链模式Chain of Responsibility与C++的异常处理机制有...

    Object-Oriented Analysis and Design 第六章

    - Chain of Responsibility pattern allows you to pass a request along a chain of objects until one handles it. - Command pattern encapsulates a request as an object, enabling you to parameterize ...

    design-pattern-java.pdf

    十一个行为型模式 十一个行为型模式 职责链模式-Chain of Responsibility Pattern 请求的链式处理——职责链模式(一) 请求的链式处理——职责链模式(二) 请求的链式处理——职责链模式(三) 请求的链式处理——...

    25-STL课件-235ye-c

    9. Chain of Responsibility Pattern:责任链模式,允许多个对象处理请求。 10. Command Pattern:命令模式,将请求封装成对象,并使其可被参数化和队列化。 面向对象开发 课程中还将涵盖面向对象开发的基本概念和...

Global site tag (gtag.js) - Google Analytics