栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式(四)责任链模式——责任链模式结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式(四)责任链模式——责任链模式结构

定义

责任链是行为型设计模式的一种,通过前一个处理者记录下一个处理者的方式形成一条处理链。客户端在调用时只需要将请求传递到责任上即可,无需关注链路中的具体的传递过程。而链路中内部的处理,是按照前一个处理者记录的下一个处理者依次执行。这样可以避免客户端调用方和多个处理者对象耦合。

责任链模式结构
  • 抽象处理器 :定义下一个处理器对象和处理方法,交给子类实现
  • 具体处理器 :继承抽象处理类,对处理方法按需实现。在处理方法的最后调用下一个处理器的处理方法。
  • 调用方 :组装处理器链,将调用请求发送给处理器链的顶端。
类图

代码实现

使用JavaSE代码实现责任链模式。

定义抽象处理器

public abstract class AbstractHandler {

    private AbstractHandler nextHandler;

    
    abstract public Object doFilter();


    public AbstractHandler getNextHandler() {
        return nextHandler;
    }

    public void setNextHandler(AbstractHandler nextHandler) {
        this.nextHandler = nextHandler;
    }
}
定义具体的处理器实现类
public class AHandler extends AbstractHandler {

    
    @Override
    public Object doFilter() {
        System.out.println("A doSomething");
        if (getNextHandler() != null) {
            // 如果存在下一个处理器,则继续向下调用
            return getNextHandler().doFilter();
        }
        return new Object();
    }
}


public class BHandler extends AbstractHandler {

    
    @Override
    public Object doFilter() {
        System.out.println("B doSomething");
        if (getNextHandler() != null) {
            // 如果存在下一个处理器,则继续向下调用
            return getNextHandler().doFilter();
        }
        return new Object();
    }
}
定义调用方
public class ClientDemo {

    public static void main(String[] args) {
        // 构建A处理器对象
        AHandler aHandler = new AHandler();
        // 构建A处理器对象
        BHandler bHandler = new BHandler();

        // 组装处理器链, A处理器作为第一个处理器, 为A处理器设置下一个处理器
        aHandler.setNextHandler(bHandler);

        // 将请求发送给处理器链的顶端
        aHandler.doFilter();
    }
}

执行main方法

控制台打印日志如下,说明程序按照demo中设定好的 A -> B 顺序正确执行。

A doSomething
B doSomething
总结 优点
  • 降低了各个处理器之间的耦合,各处理器只关注处理自身的内部逻辑,然后抛给下一个处理器即可。不需要关注具体的上下游调用关系。
  • 提高可扩展性,可在组装处理器链时对链路进行扩展。
  • 可灵活调整各处理器之间的调用顺序
缺点
  • 调用方需要组装处理器链,虽然降低了处理器间的耦合,但是组装链时却存在耦合。(下一篇博文中会提出通过spring容器来解决创建链的问题)
  • 会增加程序的复杂度,需评估酌情使用,不可为了设计模式而用设计模式。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号