`

责任链模式

阅读更多
责任链模式(Chain of Responsibility Pattern)
责任链模式是一种对象的行为模式。
     在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。
一、责任链模式的结构
1、责任链模式涉及的角色
抽象处理者角色(Handler):定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回下家的引用。这个角色通常由一个Java抽象类或Java接口实现。图中的聚合关系给出了具体子类对下家的引用,抽象方法handlerRequest()规范了子类处理请求的操作。
具体处理者角色(ConcreteHandler):具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于处理者持有下家引用,因此,如果需要,具体处理者可以访问下家。
抽象处理者角色
public abstract class Handler
{
protected Handler successor;//定义下家的引用
public abstract void handleRequest();//处理方法,调用此方法处理请求
    public void setSuccessor(Handler successor)//赋值方法,调用此方法设置下家
    {
        this.successor = successor;
    }
    public Handler getSuccessor()//取值方法,得到下家对象
    {
        return successor;
    }
}
具体处理者角色,如果有下家,就将请求传给下家,否则就处理请求
public class ConcreteHandler extends Handler
{
    public void handleRequest()
    {
        if (getSuccessor() != null)
        {
            System.out.println("The request is passed to " + getSuccessor());
            getSuccessor().handleRequest();
        }
        else
        {
            System.out.println("The request is handled here.");
        }
    }
}
客户端角色
public class Client
{
    static private Handler handler1, handler2;
    public static void main(String[] args)
    {
        handler1 = new ConcreteHandler();
        handler2 = new ConcreteHandler();
        handler1.setSuccessor(handler2);
        handler1.handleRequest();
    }
}
 客户端创建了2个处理者对象,并指定第一个处理者对象的下家是第2个处理者对象,而第2个处理者对象没有下家。然后客户端将请求传递给第一个处理者对象。
一个纯的责任链模式要求一个具体的处理者对象只能在2个行为中选择一个:继承责任或者把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收器;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。
纯的责任链模式的例子很难找到,一般看到的例子都是不纯的责任链模式的实现。
分享到:
评论

相关推荐

    spring责任链模式详解

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

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

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

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

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

    责任链模式代码

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

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

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

    责任链模式Demo

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

Global site tag (gtag.js) - Google Analytics