java设计模式(十五)责任链模式

news/2024/11/26 0:26:40/

目录

  • 定义
  • 模式结构
  • 角色职责
  • 代码实现
  • 适用场景
  • 优缺点

定义

责任链模式(Chain of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处理它。

模式结构

在这里插入图片描述

角色职责

  1. 抽象处理类: 主要包含一个指向下一处理类的成员变量 nextHandler 和一个处理请求的方法 handRequest,handRequest 方法的主要思想是,如果满足处理的条件,则有本处理类来进行处理,否则由 nextHandler 来处理。

  2. 具体处理类: 具体处理类的主要是对具体的处理逻辑和处理的适用条件进行实现。

  3. 客户类(Client)角色: 创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

代码实现

抽象处理类:

abstract class Handler {private Handler next;public Handler getNext() {return next;}public void setNext(Handler next) {this.next = next;}public abstract void handleRequest(String request);
}

具体处理类:

public class ConcreteHandler1 extends Handler {@Overridepublic void handleRequest(String request) {if ("one".equals(request)) {System.out.println("具体处理者1负责处理该请求!");} else {if (getNext() != null) {getNext().handleRequest(request);} else {System.out.println("没有人处理该请求!");}}}
}public class ConcreteHandler2 extends Handler {@Overridepublic void handleRequest(String request) {if (request.equals("two")) {System.out.println("具体处理者2负责处理该请求!");} else {if (getNext() != null) {getNext().handleRequest(request);} else {System.out.println("没有人处理该请求!");}}}
}

客户端请求:

public class ChainOfResponsibilityPattern {public static void main(String[] args) {//组装责任链Handler handler1 = new ConcreteHandler1();Handler handler2 = new ConcreteHandler2();handler1.setNext(handler2);//提交请求handler1.handleRequest("two");}
}

输出结果:

具体处理者2负责处理该请求!

适用场景

1.有多个对象可以处理一个请求,哪个对象处理该请求由运行时刻自动确定。
2.可动态指定一组对象处理请求,或添加新的处理者。
3.在不明确指定请求处理者的情况下,向多个处理者中的一个提交请求。

优缺点

优点:
1.实现了请求发送者与请求处理者之间的松耦合
2.可动态添加责任对象、删除责任对象、改变责任对象顺序,非常灵活
3.每个责任对象专注于做自己的事情,职责明确
缺点:
1.不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。
2.对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
3.职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。
在这里插入图片描述


http://www.ppmy.cn/news/252876.html

相关文章

主板的简介

主板的另一特点,是采用了开放式结构。主板上大都有6-8个扩展插槽,供PC机外围设备的控制卡(适配器)插接。通过更换这些插卡,可以对微机的相应子系统进行局部升级,使厂家和用户在配置机型方面有更大的灵活性。 总之,主板…

主板结构

主板结构 百科名片 简略主板结构 主板作为其他硬件运行的平台,为电脑的运行发挥联通和纽带的作用。 目录 概念 一、主板板型分类 1、PCAT主板 2、Baby AT主板 3、ATX结构主板 4、MATX结构主板 5、BTX具有如下特点: 6、Mini-ITX结构主板: 二、…

主板类型

主板类型 什么是主板 主板,又叫主机板(mainboard)、系统板(systembourd)和母板(motherboard);它安装在机箱内,是微机最基本的也是最重要的部件之一。 主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有…

主板bios

目前市面上较流行的主板BIOS主要有 Award BIOS、AMI BIOS、Phoenix BIOS三种类型。 通过Intel授权的全球一共有四家,除了上面说的三家还有一家国产BIOS--Byosoft BIOS。 早期的286、386大多采用AMI BIOS,它对各种软、硬件的适应性好,能保证系…

组装电脑基础知识之主板

前言 本系列文章是为准备自己组装台式机的小伙伴写的关于中央处理器CPU、主板、显卡等部分的参考资料。 一、简介 主板作为计算机CPU、显卡等硬件的载体,各硬件通过主板进行连接成为一个整体从而完成协作。 提示:因为需要考虑主板是否兼容CPU以及能否…

Vue2 vue-cli

安装与卸载vue脚手架 npm i -g vue/cli vue --version 查看vue脚手架版本 vue -V 查看vue脚手架版本 npm uninstall -g vue/cli 卸载 创建项目 vue create 项目名 选择项目 (Default 为快速创建项目) 选择最后一下,回车 上下键选择 Rou…

【TCP/IP】基于UDP的服务器端/客户端实现 II - 实践与实现

基于UDP的回声服务器端/客户端 结合之前基于TCP实现的回声服务器&#xff0c;我们尝试再用UDP来完成对回声服务器/客户端的设计。 echo_server: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa…

2023年浏览器哪个好,如何选择浏览器?

浏览器作为电脑必备的软件之一&#xff0c;相信绝大多数人都用过。选择一款好用的浏览器&#xff0c;可以帮助我们提升工作效率。那么&#xff0c;浏览器哪个比较好&#xff0c;我们如何选择合适的浏览器&#xff1f;为了找到集速度、易用性、安全于一身的浏览器&#xff0c;我…