责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理同一个请求,如果处理类不处理就传递给下一个处理类来处理,每个处理类保持对下一个处理类的引用,直到遍历完所有链类直到有类来处理为止。
纯的责任链有两种行为:要么处理掉,要么不处理掉。
不纯责任链:处理器只处理其中一部分请求逻辑,责任链中所有处理器类可以不处理请求。
这里以 病人看病。刚好 脚受伤。。不知道找哪个科室。分别找内科。外科。。皮肤科 最后找到了骨科。到了。骨科医生再也没推辞了。二话不说就给他处理掉了。。
每个科室的医生都各自负责自己分内的事。所有这些科室组织成一个责任链。然后分别找这些科室。。找对了科室就会处理掉。。这个是典型的责任链模式的应用
//病人统一接口。有可能腿上。。有可能是皮肤病等。
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
缺点:由于每次请求,不知道由哪个处理器来处理(客户端并不知道)。所以每次都要遍历环形结构中所有处理器类。这样导致效率比较低下。
发表评论
-
调停者,观察者,门面模式
2011-11-15 19:38 1289调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 620访问者模式 -
状态模式
2011-08-26 10:06 523状态模式 -
备忘录模式
2011-08-25 16:17 791备忘录模式又叫快照模式或者Token模式 是对象的行为模式 ... -
命令模式
2011-08-25 14:40 714命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
模板方法模式
2011-08-24 13:35 650这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 687策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 681不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 723桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 891为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
享元模式
2011-08-18 08:53 684享元模式的角色划分: 1,抽象享元角色:享元角色需要实现的公 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 694装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ... -
组合设计模式(合成模式)
2011-08-14 23:35 825组合设计模式(部分-整体设计模式) 主要角色涉及三个 抽 ...
相关推荐
责任链模式是软件设计模式中的一种行为模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在Spring框架中,责任链模式被广泛应用于AOP(面向切面编程)和事件处理等场景。下面将详细阐述责任...
责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...
职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...
责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...
职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...
责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来形成一条链,每个对象都包含对请求的处理逻辑,以及将请求传递给链中下一个对象的能力。这种模式使得我们可以将请求的发送者和接收者解耦,使得...
责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的发送者与接收者解耦,同时也允许在运行时动态地改变处理顺序或添加新的...
本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...
职责链模式(Chain of Responsibility)是一种行为设计模式,它允许我们沿着对象链传递请求,让每个对象决定是否处理这个请求,或者将请求传递给链中的下一个对象。在C#中,我们可以利用类和接口来实现这种模式。让...
责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...
责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来解耦发送者和接收者。在责任链模式中,每个对象都是链上的一个节点,可以处理请求的一部分或者将请求传递给链上的下一个对象。这种模式使得系统...
【职责链模式】是行为型模式的一种,其主要动机是解耦请求的发送者和处理者。在职责链中,多个对象可以接收并处理同一个请求,这些对象形成一条链,请求沿着链传递,直到某个对象负责处理。这种方式减少了对象间的...
责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(过滤器)形成一个链,这些对象依次处理请求,而发送者无需知道哪个对象具体处理请求。这种模式将请求的发送者与接收者解耦,增加了系统的灵活性和可...
责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,而接收者可以在链中的任何位置处理该请求。这种模式的核心思想是将处理请求的对象组织成一个链条,每个对象(节点)都包含对下个处理者的...
责任链模式是一种行为设计模式,它允许我们定义一系列处理请求的对象,这些对象形成一个链,请求沿着这个链传递,直到某个对象能够处理它。这种方式使得我们可以将请求的发送者和接收者解耦,同时增加了系统扩展的...
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...
责任链模式(Chain of Responsibility Pattern)是设计模式中的一种行为模式,它的主要目的是将请求的发送者和接收者解耦,使得多个对象有机会处理这个请求,形成一条责任链。在这个链上,请求会沿着链传递,直到有...
责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(每个对象称为一个节点),将请求在这些对象之间传递,直到被某个节点处理或者传递完整个链条。这种模式的主要优点在于解耦了发送者和接收者,使得系统...