`

责任链模式 chain of responsibility(原)

 
阅读更多

动机:

在开发过程中有一种情况:一个事件产生一个请求,这个请求需要很多对象来处理它,更极端一点,我们不能直接访问这些对象。这种情况下我们有两种解决方案:

       1、让这些对象变成public,创建这些对象的引用,然后处理这个请求

       2、使用责任链模式

在责任链模式中,一组处理请求的对象构成一条链子,每个对象都可以处理请求而且持有下个对象的引用,请求从一个对象传递到下一个对象,直到处理完这个请求。

 

意义或者作用:

      1、避免请求发送者直接依赖所有接受者对象,达到解耦的目的。

      2、所有接受者对象都成为链的一部分,请求在这些对象中传递直到某个对象解决掉请求

 

使用场景或者条件:

      1、有多个handler可以处理一条命令

      2、预先不知道哪个handler来处理,到底使用哪个handler应该由handler内部处理方法自动地确定

      3、请求应该发送到一组handler,而不是某个handler

 

UML结构图:

  • Handler - defines an interface for handling requests
    • RequestHandler - handles the requests it is responsible for
    • If it can handle the request it does so, otherwise it sends the request to its successor
  • Client - sends commands to the first object in the chain that may handle the command
  •  

    附上一个例子:

    public class Request {	
    	private int m_value;
    	private String m_description;
    
    	public Request(String description, int value)
    	{
    		m_description = description;
    		m_value = value;
    	}
    
    	public int getValue()
    	{
    		return m_value;
    	}
    
    	public String getDescription()
    	{
    		return m_description;
    	}          
    }
    
    public abstract class Handler
    {
    	protected Handler m_successor;
    	public void setSuccessor(Handler successor)
    	{
    		m_successor = successor;
    	}
    
    	public abstract void handleRequest(Request request);
    }
    
    public class ConcreteHandlerOne extends Handler
    {
    	public void handleRequest(Request request)
    	{
    		if (request.getValue() < 0)
    		{           //if request is eligible handle it
    			System.out.println("Negative values are handled by ConcreteHandlerOne:");
    			System.out.println("\tConcreteHandlerOne.HandleRequest : " + request.getDescription()
    						 + request.getValue());
    		}
    		else
    		{
    			super.m_successor.handleRequest(request);
    		}
    	}
     }
    
    public class ConcreteHandlerThree extends Handler
    {
    	public void handleRequest(Request request)
    	{
    		if (request.getValue() >= 0)
    		{           //if request is eligible handle it
    			System.out.println("Zero values are handled by ConcreteHandlerThree:");
    			System.out.println("\tConcreteHandlerThree.HandleRequest : " + request.getDescription()
    						 + request.getValue());
    		}
            else
    		{
    			super.m_successor.handleRequest(request);
    		}
    	}
    }
    
    public class ConcreteHandlerTwo extends Handler
    {
    	public void handleRequest(Request request)
    	{
    		if (request.getValue() > 0)
    		{           //if request is eligible handle it
    			System.out.println("Positive values are handled by ConcreteHandlerTwo:");
    			System.out.println("\tConcreteHandlerTwo.HandleRequest : " + request.getDescription()
    						 + request.getValue());
    		}
            else
    		{
    			super.m_successor.handleRequest(request);
    		}
    	}
    }
    
    public class Main 
    {
    	public static void main(String[] args) 
    	{
    		// Setup Chain of Responsibility
    		Handler h1 = new ConcreteHandlerOne();
    		Handler h2 = new ConcreteHandlerTwo();
    		Handler h3 = new ConcreteHandlerThree();
    		h1.setSuccessor(h2);
    		h2.setSuccessor(h3);
    
    		// Send requests to the chain
    		h1.handleRequest(new Request("Negative Value ", -1));
    		h1.handleRequest(new Request("Negative Value ",  0));
    		h1.handleRequest(new Request("Negative Value ",  1));
    		h1.handleRequest(new Request("Negative Value ",  2));
    		h1.handleRequest(new Request("Negative Value ", -5));	    
    	}
    }
    

     

     

    分享到:
    评论

    相关推荐

      设计模式C++学习之责任链模式(Chain of Responsibility)

      责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。这种模式的主要优点是解耦了发送者和接收者之间的关系,使得系统更加灵活,...

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

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

      java设计模式之责任链(chain of responsibility)

      责任链(Chain of Responsibility)模式是一种行为设计模式,它允许我们向对象链中传递请求,让每个对象决定是否处理这个请求。在Java中,这种模式常用于事件处理、日志系统或者权限控制等场景,其核心思想是将处理...

      Chain of Responsibility 职责链模式

      C#面向对象设计模式 Chain of Responsibility 职责链模式 视频讲座下载

      Chain of Responsibility模式

      这个模式的主要目的是允许在对象之间传递请求,同时避免将接收者硬编码到发送者中,使得多个对象有机会处理一个请求,形成一个责任链。 ### 一、模式概念 在Chain of Responsibility模式中,请求的发送者将请求...

      (行为型模式) Chain Of Responsibility 职责链模式

      C#面向对象设计模式 (行为型模式) Chain Of Responsibility 职责链模式 视频讲座下载

      【Java设计模式】(3)责任链Chain of Responsibility

      **Java设计模式——责任链(Chain of Responsibility)** 在软件工程中,设计模式是一种解决常见问题的可重用解决方案。责任链模式是行为设计模式之一,它的主要思想是将请求的发送者和接收者解耦,通过将多个处理...

      Chain Of Responsibility模式

      Chain of Responsibility(责任链)模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,每个对象都可以处理请求或将其传递给链中的下一个对象。这种模式常用于事件处理或者命令的执行流程,使得多个...

      chain of responsibility.pptx

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

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

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

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

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

      chain-of-responsibility-demo 责任链模式demo

      在这个`chain-of-responsibility-demo`中,我们可以预期找到一个实际应用了责任链模式的代码示例。通常,它会包含以下关键组件: 1. **Handler**(处理器):这是责任链中的基本单元,每个处理器都实现了处理请求的...

      C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式

      职责链模式(Chain of Responsibility)是一种行为型设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在C#中,职责链模式的应用可以帮助我们构建灵活、可扩展的系统,减少对象...

      Java设计模式之责任链模式(Chain of Responsibility模式)介绍

      责任链模式(Chain of Responsibility,CoR)是一种行为设计模式,它允许将请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。每个处理者对象都包含对下一个处理者的引用,如果当前处理者无法处理...

      C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) (Level 300)

      职责链模式(Chain of Responsibility)是一种行为型设计模式,它允许你将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在C#编程中,职责链模式能够帮助我们实现一种松耦合的架构,使得请求的发送者和...

      责任链模式_javaDemo

      责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...

      C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式)

      ### C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) #### 概述 在本篇文章中,我们将深入探讨C#中的Chain of Responsibility(职责链)模式,这是行为型设计模式的一种。虽然标题...

      JAVA设计模式之行为模式 责任链模式和状态模式

      本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

      设计模式之责任链模式Java实现

      责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...

    Global site tag (gtag.js) - Google Analytics