`
chendw_hz
  • 浏览: 11390 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

责任链模式

 
阅读更多

责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理同一个请求,如果处理类不处理就传递给下一个处理类来处理,每个处理类保持对下一个处理类的引用,直到遍历完所有链类直到有类来处理为止。

纯的责任链有两种行为:要么处理掉,要么不处理掉。

不纯责任链:处理器只处理其中一部分请求逻辑,责任链中所有处理器类可以不处理请求。

 

这里以 病人看病。刚好 脚受伤。。不知道找哪个科室。分别找内科。外科。。皮肤科 最后找到了骨科。到了。骨科医生再也没推辞了。二话不说就给他处理掉了。。

每个科室的医生都各自负责自己分内的事。所有这些科室组织成一个责任链。然后分别找这些科室。。找对了科室就会处理掉。。这个是典型的责任链模式的应用

//病人统一接口。有可能腿上。。有可能是皮肤病等。 

public interface Patient{

    //出问题的方法 譬如皮肤出问题。骨折等。

    public void fractrue();

}

 

//病人的实现接口的类

pulic class PatientImpl implements Patient{

     //什么病  属性

    private String  problem;

   

    //构造子

    public PatientImpl(String problem){

 

     this.prodblem = problem;

 }

 

 public void fractrue(){

    System.out.println("我是生的病是"+problem+",请医生帮我看一下!谢谢");

 }

 

   public void setProblem(String problem){

      this.problem=problem

   }

   

   public void getProblem(String problem){

     return problem;

   }

}

 

//不同医生 看不同的病 组成一个责任链换

 public inteface DoctorHandler{

    //处理器是否已经处理了这个病人

     public void handle(Patient patient);

 }

 

//内科医生处理器

public class PhysicianHandler  implements DoctorHandler{

   //下一个处理器的引用

   private  DoctorHandler handler;

    //具体处理器类  

    public void handle(Patient patient){

           if(StringUtils.equals(patient.getProblem,"心脏病")){

                patient.fractrue();

               System.out.println("你这个心脏病很严重啊,我给看看,开几副药吃吃看!");

          }else{

                //丢给下一个处理器

                handler.handle(patient); 

               }   

     }

 

  public void setHandler(DoctorHandler handler){

       this.handler = handler

    }

}

 

//外科医生处理,处理大部分外科病

public class SurgeonHandler implements DoctorHandler{

     //保持下一个处理器的引用

   private DoctorHandler handler;

    //外科处理

    public void handle(Patient patient){

       if(StringUtils.equals(patient,"皮肤病")){

              patient.fractrue();

             System.out.println("你这个病很严重,给你开几副药吧。。不然会毁容!");

       }else{

            //丢给下一个处理器

               handler.handle(patient);

          }

   }

 

  public void setHandler(DoctorHandler handler){

       this.handler = handler

    }

}

 

//骨科医生的处理器。

public void OrthopaedicsHandler implements DoctorHandler{

    //下一个处理器

   private DoctorHandler handler;

   

    //骨科处理骨科病的方式 

    public void handle(Patient patient){

      if(StringUtils.equals(patient.getProblem,"骨折")){

          patient.fractrue();

         System.out.println("骨折不是很严重,打一下石膏,过三天就好了!")  

     }else{

              handler.handle(patient);

            }

    }

  

  public void setHandler(DoctorHandler handler){

       this.handler = handler

    }

 }

 

//客户端创建病人。。然后丢给医院的各个科室,让科室医生去看,病人不知道哪个科室能处理哪种病

public class Client{

  

 public static void main(String args[]){

       //骨折病人

        Patient patient = new PatientImpl("骨折");

        DoctorHandler handler = new PhysicianHandler()

        DoctorHandler handler1 = new SurgeonHandler();

        DoctorHandler handler2= new OrthopaedicsHandler();

        handler.setHandler(handler1);

        handler1.setHandler(handler2);

        handler.handle(patient);

  }

}

//打印结果

我是生的病是骨折,请医生帮我看一下!谢谢;

骨折不是很严重,打一下石膏,过三天就好了!;

当创建骨折病人请求时,在骨折医生这里得到了救治和处理。其他医生是不会处理点,然后丢给其他科室医生进行处理。

这个例子虽然很粗略,但是说明责任链模式的意图和用意。

责任链模式的核心:

多个处理器类组成一个环型结构。

使用场景:

1:系统发出一个请求,给多个处理器对象处理这一个请求。但是不会知道到底由哪个处理器来处理。

优点:

 降低了请求和处理器之间的耦合。很轻易增加一个处理器来处理这个请求。只要维护这个环型结构就OK

缺点:由于每次请求,不知道由哪个处理器来处理(客户端并不知道)。所以每次都要遍历环形结构中所有处理器类。这样导致效率比较低下。

分享到:
评论

相关推荐

    spring责任链模式详解

    责任链模式是软件设计模式中的一种行为模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在Spring框架中,责任链模式被广泛应用于AOP(面向切面编程)和事件处理等场景。下面将详细阐述责任...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    设计模式之职责链模式(ChainOfResponsibilityPattern)

    职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...

    责任链模式代码

    责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...

    设计模式 - 职责链模式(C++实例)

    职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...

    责任链模式Demo

    责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来形成一条链,每个对象都包含对请求的处理逻辑,以及将请求传递给链中下一个对象的能力。这种模式使得我们可以将请求的发送者和接收者解耦,使得...

    设计模式-责任链模式

    责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的发送者与接收者解耦,同时也允许在运行时动态地改变处理顺序或添加新的...

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

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

    职责链模式模型代码

    职责链模式(Chain of Responsibility)是一种行为设计模式,它允许我们沿着对象链传递请求,让每个对象决定是否处理这个请求,或者将请求传递给链中的下一个对象。在C#中,我们可以利用类和接口来实现这种模式。让...

    设计模式之责任链模式(Chain)

    责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...

    责任链模式例子

    责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来解耦发送者和接收者。在责任链模式中,每个对象都是链上的一个节点,可以处理请求的一部分或者将请求传递给链上的下一个对象。这种模式使得系统...

    第17章_职责链模式.ppt

    【职责链模式】是行为型模式的一种,其主要动机是解耦请求的发送者和处理者。在职责链中,多个对象可以接收并处理同一个请求,这些对象形成一条链,请求沿着链传递,直到某个对象负责处理。这种方式减少了对象间的...

    责任链模式小demo

    责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(过滤器)形成一个链,这些对象依次处理请求,而发送者无需知道哪个对象具体处理请求。这种模式将请求的发送者与接收者解耦,增加了系统的灵活性和可...

    【设计模式】之责任链模式1

    责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,而接收者可以在链中的任何位置处理该请求。这种模式的核心思想是将处理请求的对象组织成一个链条,每个对象(节点)都包含对下个处理者的...

    责任链模式学习

    责任链模式是一种行为设计模式,它允许我们定义一系列处理请求的对象,这些对象形成一个链,请求沿着这个链传递,直到某个对象能够处理它。这种方式使得我们可以将请求的发送者和接收者解耦,同时增加了系统扩展的...

    设计模式之责任链模式程序

    一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...

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

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

    设计模式的责任链模式的例子

    责任链模式(Chain of Responsibility Pattern)是设计模式中的一种行为模式,它的主要目的是将请求的发送者和接收者解耦,使得多个对象有机会处理这个请求,形成一条责任链。在这个链上,请求会沿着链传递,直到有...

    责任链模式 C++ 实现

    责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(每个对象称为一个节点),将请求在这些对象之间传递,直到被某个节点处理或者传递完整个链条。这种模式的主要优点在于解耦了发送者和接收者,使得系统...

Global site tag (gtag.js) - Google Analytics