14 【行为型】责任链模式理解与使用~

责任链模式

通俗的讲,就好比将所有要处理的对象链接再一条链子上,如果这个对象不能处理,就传递到下一个对象,依次传递,完成请求的转发与处理。

灵魂画师~ 走你

这里用要给漏斗过滤的原理在说明责任链,就好比漏斗的每一层都有一层过滤膜,不同大小的球体进入这个过滤层之后,通过不同的滤网,直到小球无法通过被隔离在上面

,这就好比责任链模式,小球就是一个个请求对象,要是小球的直径小于滤孔,则无法被捕捉处理,只能通过,交给下级处理,直到有滤网可以处理,才停留下来。

例子2

log4j的日志系统是JAVA里面常用的日志,这里只常用四个,从DEBUG开始,到ERROR,

设置不同的日志等级,就会打印出不同的日志,就好比ERROR日志等级只会打印出错误相关的事情,

而DEBUG就会打印出所有信息,这里就按照这个类型来举例子

代码理解

定义一个抽象类,定义出DEBUG\INFO\ERROR 等错误等级的标识以及定义打印日志的方法,

public abstract class AbstractLogger {

    public  int DEBUG = 1;

    public  int INTO = 2;

    public  int ERROR = 3;

    protected int level;

    protected AbstractLogger nextLogger;

    public void logMessage(int level,String message){

        if (this.level <= level) {
            this.log(message);
        }

        if (nextLogger != null) {
            nextLogger.logMessage(level,message);
        }

    }

    public abstract void log(String message);

    public void setNextLogger(AbstractLogger nextLogger){
        this.nextLogger = nextLogger;
    }

}

Console 日志等级为一级,作为最低一级,它的下一级等级为INFO

public class ConsoleLogger extends AbstractLogger {

    ConsoleLogger(){
        this.level = DEBUG;
        setNextLogger(new FileLogger());
    }

    @Override
    public void log(String message) {
        System.out.println("console log:"+message);
    }
}

FileLogger 日志等级为2,INFO日志等级。它的下一级为ErrorLogger

public class FileLogger extends AbstractLogger {

    FileLogger(){
        this.level = INTO;
        this.setNextLogger(new ErrorLogger());
    }

    @Override
    public void log(String message) {
        System.out.println("fileLogger:"+message);
    }
}

//最后一级Error作为等级最高的以及,它没有下级了,所以传递一个Null

public class ErrorLogger extends AbstractLogger {

    public ErrorLogger(){
        this.level = ERROR;
        this.setNextLogger(null);
    }

    @Override
    public void log(String message) {
        System.out.println("errorLogger:"+message);
    }
}

测试方法,这里只需要暴露出最低级的ConsoleLogger 即可,然后传递不同类型的错误信息和等级

    public static void main(String[] args) {

        AbstractLogger logger = new ConsoleLogger();

        logger.logMessage(3,"错误信息");

        System.out.println();

        logger.logMessage(2,"发生了错误");
        System.out.println();

        logger.logMessage(1,"控制台信息");

    }

就好比使用Debug 类型错误打印的时候,出现一个Error类型的错误,它都会被输入,但是用Debug类型来处理一个1急别Debug类型,

只会出现一层,不会出现到下一层的Info 一样的道理。

参考:https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html

码云:https://gitee.com/mrc1999/23GOF

原文地址:https://www.cnblogs.com/ChromeT/p/11785596.html

时间: 2024-10-28 22:18:30

14 【行为型】责任链模式理解与使用~的相关文章

[设计模式-行为型]责任链模式(Chain of Responsibility)

概括 名称 Chain of Responsibility 结构 动机 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 解析 形象比喻: 晚上去上英语课, 为了好开溜坐到了最后一排, 哇, 前面坐了好几个漂亮的MM 哎

JAVA设计模式(13):行为型-责任链模式(Responsibility)

定义 将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求, 如果能则处理,如果不能则传递给链上的一个对象. 场景: 打牌时,轮流出牌 接力赛跑 大学中,奖学金审批 公司中,公文审批 开发中常见的场景: Java中,异常机制就是一种责任链模式.一个try可以对应多个catch,当第一个catch不匹配类型,则自动跳到第二个catch. Javascript语言中,事件的冒泡和捕获机制.Java语言中,事件的处理采用观察者模式. Servlet开发中

5 行为型模式之- 责任链模式

责任链模式介绍: 责任链模式是行为模式之一,什么是"链"?我们将多个节点首尾相连,就形成了链,对于链式结构,每个节点都可以拆开再重新连接,因此链式结构也具有很好的灵活性.将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从一个链的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止,我们将这样的一种模式称为责任链模式. 责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这

设计模式(13)--Chain of Responsibility(责任链模式)--行为型

1.模式定义: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 2.模式特点: 责任链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时.何处以及如何被处理,实现了请求发送者与处理者的解耦.在软件开发中,如果遇到有多个对象可

行为型模型 责任链模式

行为型模型 责任链模式 Handler         处理类的抽象父类. concreteHandler         具体的处理类. 责任链优缺点 优点:         1.责任的分担.每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则.         2.可以根据需要自由组合工作流程.如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程.         3.类与类之间可以以松耦合的形式加以组织.缺点:      

设计模式-行为型模式,责任链模式(10)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. class Event: def __init__(self, name): self.name = name def __str__(self): ret

责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 责任链模式中,每个对象通过持有对下家的引用而链接起来,形成一条链条,串联起来多个处理对象. 在责任链模式中,请求在链上进行传递,直到链上的某一个对象决定处理此请求. 发出这个请求的客户端程序并不知道到底是哪一个对象具体的处理了请求 这使得系统可以在不影响客户

行为型模式:责任链模式

文章首发:行为型模式:责任链模式 十一大行为型模式之四:责任链模式. 简介 姓名 :责任链模式 英文名 :Chain of Responsibility Pattern 价值观 :责任归我 个人介绍 :Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and

责任链模式-对象行为型

原理 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 组成 责任链模式涉及到的角色如下所示: ● 抽象处理者(Handler)角色:定义出一个处理请求的接口.如果需要,接口可以定义出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现.上图中Handler类的