专栏首页用户5325874的专栏常用设计模式——责任链模式

常用设计模式——责任链模式

责任链模式

责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。

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

责任链模式的重点在“链上”,由一条链去处理相似的请求,在链中决定谁来处理这个请求,并返回相应的结果。

角色

抽象处理者(Handler)角色:

该角色对请求进行抽象,并定义一个方法来设定和返回对下一个处理者的引用。

具体处理者(Concrete Handler):

该角色接到请求后,**可以选择将请求处理掉,或者将请求传给下一个处理者。**由于具体处理者持有对下一个处理者的引用,因此,如果需要,处理者可以访问下一个处理者。

示例

/**
 * 抽象处理器
 */
public abstract class Handler {

    //下一个处理器
    private Handler nextHandler;

    //处理方法
    public abstract void handleRequest();

    public Handler getNextHandler() {
        return nextHandler;
    }

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

}
/**
 * 具体处理器.
 */
public class ConcreteHandler extends Handler {

    @Override
    public void handleRequest() {

        // 当前处理器处理
        System.out.println(this.toString()+"处理器处理");

        // 下一个处理器处理
        if (getNextHandler()!=null){
            getNextHandler().handleRequest();
        }
    }

}
public class Client {

    public static void main(String[] args) {

        Handler h1 = new ConcreteHandler();
        Handler h2 = new ConcreteHandler();
        // h1的下一个处理器是h2
        h1.setNextHandler(h2);

        h1.handleRequest();
    }
}

参考 https://www.cnblogs.com/aeolian/p/8888958.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常用设计模式——迭代器模式

    用户5325874
  • 常用设计模式——装饰模式

    装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者模式提供了比继承更有弹性的方案

    用户5325874
  • 常用设计模式——复合模式

    视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态和数据。视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。

    用户5325874
  • WinSock 完成端口模型

    之前写了关于Winsock的重叠IO模型,按理来说重叠IO模型与之前的模型相比,它的socket即是非阻塞的,也是异步的,它基本上性能非常高,但是它主要的缺点在...

    Masimaro
  • 对高并发流量控制的一点思考

    在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考。

    lyb-geek
  • 性能工具之Jmeter上传与下载介绍

    上面是简单的介绍,知识点很多java文件操作,目录操作,http请求等信息,高老师经典一句《看到数据,推断什么地方有性能问题,背后的知识点需要积累多少...

    高楼Zee
  • 行为型模式:迭代器模式

    Provide a way to access the elements of an aggregate object sequentially without...

    LieBrother
  • 把canvas标签里的图像下载成本地图片文件

    有些在线图片网站,进行图像处理比如去除背景后,结果图片是以html5里canvas标签的形式显示出来的,我们没有办法通过右键点击图片然后下载的方式去保存到本地。

    Jerry Wang
  • springboot使用MultipartFile文件上传

    似水的流年
  • ASP.NET MVC 开源项目Kigg解读(2)——Kigg.Core第一部分

    Kigg是一个很好的ASP.NET MVC范例项目,本着研究的目的,对Kigg进行解读。 上一篇中,我们介绍了Kigg的启动、后台任务和事件聚合器。这一篇,我们...

    用户1177380

扫码关注云+社区

领取腾讯云代金券