`

设计模式_行为型_责任链模式

阅读更多

从击鼓传花谈起
  击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,假如花束在某人手中,则该人就得饮酒。

击鼓传花的类图结构如下:

 

如果用一个对象系统描述贾府,那么贾母、贾赦、贾政、贾宝玉和贾环等等就应当分别由一个个具体类代表,而这场击鼓传花游戏的类图,按照责任链模式,应当如下图所示:

 责任链模式的静态类结构可见下图:

 抽象处理者的示意性源代码:

public class Handler
 {
  public void handleRequest() 
   {
    if (successor != null) 
     { 
       successor.handleRequest();
      } 
     // Write your code here
    }
  public void setSuccessor(Handler successor) 
    { 
     this.successor = successor; 
    }
  public Handler getSuccessor() 
   { 
    return successor;
   }
  private Handler successor; 
  } 

 具体处理者的示意性源代码:

public class ConcreteHandler extends Handler
  { 
   public void handleRequest() 
    { 
     if (getSuccessor() != null) 
     {
      getSuccessor().handleRequest(); 
     } 
     if (successor != null)
     { 
      successor.handleRequest();
     }
    // Write your code here 
    }
  }

 客户端的源代码如下:

public class Client 
  {
   private Handler handler; 
   public static void main(String[] args)
    {
     handler = new ConcreteHandler();
     //write your code here
    }
  } 

 纯的与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。

  在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接受;在一个不纯的责任链模式里面,一个请求可以最终不被任何接受端对象所接受。

  纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。有些人认为不纯的责任链根本不是责任链模式,这也许是有道理的;但是在实际的系统里,纯的责任链很难找到;如果坚持责任链不纯便不是责任链模式,那么责任链模式

  • 大小: 6.4 KB
  • 大小: 13.9 KB
  • 大小: 3 KB
分享到:
评论

相关推荐

    设计模式_行为型_责任链模式.md

    行为型设计模式中的一种——责任链模式,它提供了一种优雅的方式来处理对象间的通信,尤其是当多个对象都可能处理一个请求,且具体处理的哪个对象在运行时才能决定时。本文将详细介绍责任链模式的定义、角色组成、...

    c++设计模式-行为型模式-责任链模式

    c++设计模式-行为型模式-责任链模式;qt工程;c++简单源码; 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的...

    JAVA-设计模式-行为型模式-责任链模式

    JAVA-设计模式-行为型模式-责任链模式

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    4. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    3. **责任链模式**:在对象链中传递请求,由链上的对象决定是否处理该请求,使得系统可以在不影响客户端的情况下动态调整责任分配。 4. **策略模式**:定义一组可互换的算法,并封装起来,使得它们可以相互替换,...

    设计模式_20091017.rar

    3. 行为型模式:主要关注对象之间的交互和职责分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、责任链模式(Chain of ...

    23种设计模式(C++)_设计模式c++_c/C++_frogvwe_C++设计模式_

    - 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。 - 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求,或者支持可撤销的操作。 - 解释器模式:为语言的语法...

    设计模式_可复用面向对象软件的基础

    行为型模式如策略模式、观察者模式、职责链模式等,关注对象间如何交互和责任分配。 以"jsp"标签为例,我们讨论在Web开发中设计模式的应用。JSP(JavaServer Pages)是一种用于动态生成网页的技术,常与Servlet结合...

    23种设计模式知识要点.pdf_设计模式_

    3. **行为型模式**:包括责任链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这类模式关注于对象之间的交互和行为。 - 责任链模式让多个对象...

    研磨设计模式_博文集.

    行为型模式则关注对象之间的交互和职责分配,如策略模式、责任链模式和观察者模式。 在Java中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性。例如,单例模式保证一个类只有一个实例,常用于控制共享...

    设计模式_可复用面向对象软件的基础__C++版设计模式全

    行为型模式则关注对象之间的交互和责任分配,比如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录...

    [good]设计模式_您的设计模式.rar

    行为型设计模式:关注对象间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento)、状态...

    23种设计模式_Java实现

    java的设计模式大体上分为三大类: ...行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    Head First 设计模式_源码

    行为型模式包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、命令模式(Command)、责任链模式(Chain of Responsibility)、...

    Head.First设计模式_PDF

    3. 行为型模式:这类模式关注对象之间的交互和职责分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain ...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    java设计模式_原创

    3. 行为型设计模式:这类模式关注对象之间的责任分配。其中包括责任链模式、命令模式、迭代器模式、访问者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。责任链模式通过建立处理...

    JavaScript设计模式与开发实践_himppf_js_jspremise_精通javascript_Js设计模式_

    行为型模式如观察者模式、策略模式、责任链模式等,关注对象间通信和行为的分配。 在JavaScript中,"模块模式"是常见的设计模式,它通过闭包来封装变量和函数,防止全局污染。"工厂模式"可以用来动态地创建具有相似...

Global site tag (gtag.js) - Google Analytics