23种设计模式之责任链

news/2024/5/19 12:55:43 标签: 设计模式, 责任链模式

目录

 

1.简介

2.优点

3.缺点

4.形式


1.简介

通过将这些对象连成一条链,并沿着这条链传递该请求,直到所有对象处理它为止。这样每个对象都会有机会处理请求,从而也就避免了请求的发送者和接收者之间的耦合关系。

2.优点

将请求和处理分开,两者解耦,提高系统的灵活性。

3.缺点

当链较长时,常常会引发两个问题。性能问题和调试问题,每个请求都从头遍历到尾,可想而知。

4.形式

抽象处理类

public abstract class AHandler {
    private AHandler nextHandler;

    public final Response handleMessage(Request request) {
        Response response = null;
        if(this.getHandlerLevel().equals(request.getRequestLevel())) {
            response = this.echo(request);
        }else {
            if(this.nextHandler != null) {
                response = this.nextHandler.handlerMessage(request);
            }else {
                System.out.prontln("没有后继处理者,另行处理");
            }
        }
        return response;
    }

    public void setNext(AHandler _handler) {
        this.nextHandler = _handler;
    }

    protected abstract Level getHandlerLevel();
    protected abstract Response echo(Request request);
}

具体处理类

public class Handler1 extends AHandler {
    protected Response echo(Request request) {
        System.out.println("完成处理逻辑");
        return null;
    }
    protected Level getHandlerLevel() {
        System.out.println("设置处理级别");
        return null;
    }
}

public class Handler2 extends AHandler {
    protected Response echo(Request request) {
        System.out.println("完成处理逻辑");
        return null;
    }
    protected Level getHandlerLevel() {
        System.out.println("设置处理级别");
        return null;
    }
}

public class Handler3 extends AHandler {
    protected Response echo(Request request) {
        System.out.println("完成处理逻辑");
        return null;
    }
    protected Level getHandlerLevel() {
        System.out.println("设置处理级别");
        return null;
    }
}

级别类

public class Level {
    System.out.println("请求和处理级别");
}

请求类

public class Request {
    System.out.println("封装请求");
    public Level getRequestLevel() {
        System.out.println("获取请求级别");
        return null;
    }
}

回复类

public class Response {
    Sytem.out.println("封装返回的结果");
}

测试类

public class Test {
    public static void main(String[] args) {
        AHandler handler1 = new Handler1();
        AHandler handler2 = new Handler2();
        AHandler handler3 = new Handler3();
        handler1.setNext(handler2);
        handler2.setNext(handler3);
        Reponse reponse = handler1.handlerMessage(new Request());
    }
}

 


http://www.niftyadmin.cn/n/1642464.html

相关文章

23种设计模式之装饰

目录 1.简介 2.优点 3.缺点 4.形式 1.简介 动态的给某些对象增加一些额外的职责,就增加功能来说,它比生成子类更加灵活。主要由四个部分组成:抽象组件,它是最核心的原始对象;具体组件,是抽象组件的实现…

23种设计模式之策略

目录 1.简介 2.优点 3.缺点 4.形式 1.简介 将每个算法都封装起来,并使他们之间可以互换。主要采用的使面向对象的继承和多态机制。 2.优点 由于都实现的是同一个接口,从而算法之间可以自由切换。具有良好的扩展性。 3.缺点 每一个策略都是一个类…

为什么要用@Param

目录 1.关于Param 2.原始的方法 3.使用Param 4.后记 1.关于Param Param是MyBatis所提供的(org.apache.ibatis.annotations.Param)&#xff0c;作为Dao层的注解&#xff0c;作用是用于传递参数&#xff0c;从而可以与SQL中的的字段名相对应&#xff0c;一般在2<参数数&l…

23种设计模式之迭代器

目录 1.简介 2.形式 1.简介 迭代器模式已经是一种没落的模式了&#xff0c;基本不会单独写一个迭代器。但其应用相当广泛&#xff0c;俨然已成为一种基础工具&#xff0c;如Java提供的Iterator。它对外提供一种方法用于访问一个容器对象中的每个元素&#xff0c;同时不会暴露…

表字段的处理(Sql Server)

目录 表的创建 创建约束 查看约束 删除约束 插入数据 增加字段 删除字段 表的创建 CREATE TABLE student( "学号" char(8) not null, "姓名" char(8) not null, "性别" char(2) not null, "出生日期" date default(getdate()),…

关于isEmpty(),null,“”的理解

关于null 《心经》中有段话说的是“色即是空&#xff0c;空既是色”&#xff0c;那么这里的空指的是什么呢&#xff1f;用Java里术语来说就是null。null指的就是虚无&#xff0c;那怎么体现呢&#xff1f;且看下面小栗子 Map<String,String> map new HashMap<>(…

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMake

最近在用Spring Boot 2.1.4做项目的时候&#xff0c;写完单元测试运行&#xff0c;抛出了如下的错误 java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)at org.mockito.internal.configuration.plug…

利用RawImage实现淡入淡出效果

在进行场景切换时&#xff0c;常常会看到淡入淡出的效果。要是以前在unity中&#xff0c;可能会使用GUITexture去实现&#xff0c;但这个类在UnityEngine已经被舍弃了&#xff0c;转而可以使用RawImage去实现。 1.在项目下右键->UI->Raw Image 接着就可以看见多了Canvas-…