五.责任链模式

责任链模式


模型图

模型图(来源wikipedia)

定义

它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法

解释

  1. Handler 是抽象处理者
    代码:
public abstract class Handler {
    //责任传递,下一任责任人
    private Handler nextHandler;


    public final Response handleMessage(Request request){
        Response response = null;
        if (Objects.equals(this.getHandlerLevel(),request.getRequestLevel())){
            response = this.echo(request);
        }else {
            if (Objects.nonNull(nextHandler)){//如果有后续人,继续执行
                response = this.nextHandler.handleMessage(request);
            }else {
                System.out.println("没有责任人了");
            }
        }
        return response;
    }

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

    /**
     * 每个处理者都有一个级别
     * @return
     */
    protected abstract Level getHandlerLevel();

    /**
     * 每个处理者都要实现处理任务
     * @param request
     */
    protected abstract Response echo(Request request);
}

抽象的处理者实现三个指责:

  1. 定义一个请求处理的方法handleMessage(),
    唯一对外开放;
  2. 定义一个链的编排方法hasNext方法,设置下一个执行者;
  3. 定义实现具体类需要实现的方法

优点

很明显的会将请求和处理分开,解耦

缺点

性能问题:每一个请求都得从头开始

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 9,159评论 0 14
  • 参考资料:菜鸟教程之设计模式 设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验...
    Steven1997阅读 4,925评论 1 12
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399
  • 突然想起江南写的《龙族》里的一句话:“有些路你和某些人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚...
    Conyii阅读 2,256评论 0 0
  • 夜空两边星宿 白马静宁路 世以财名分良莠 我独喜崆峒树 心怡夜空星宿 白马人立街头 世似深潭污翠柳 我乘柳絮飘游 ...
    马伊萨阅读 2,726评论 0 0