设计模式学习笔记--责任链模式

news/2024/5/14 21:12:26/文章来源:https://blog.csdn.net/smartboy_01/article/details/126941917

责任链模式

责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
在这里插入图片描述

场景

我们有一个字符串String msg = ":):,<script>,敏感,被就业,网络授课";我们希望应用以下三个规则对字符串进行过滤和谐处理:

  1. 将字符串中出现的<>符号替换成[

  2. 处理字符串中的敏感信息,将被就业和谐成就业

  3. 将字符串中出现的:):转换成^V^;

字符串会依次运用这三条规则,对字符串进行处理,每个规则都有自己需要完成的责任和任务。

定义具有过滤功能的接口Filter

具体的过滤规则需要实现该接口

public interface Filter {String doFilter(String str);
}

定义具体的过滤处理规则

规则一、处理字符串中的HTML标记HTMLFilter

public class HTMLFilter implements Filter {@Overridepublic String doFilter(String str) {//process the html tag <>return str.replace('<', '[').replace('>', ']');		}
}

规则二、敏感字眼的过滤规则SesitiveFilter

public class SesitiveFilter implements Filter {@Overridepublic String doFilter(String str) {//process the sensitive wordsString r = str.replace("被就业", "就业").replace("敏感", "");return r;}
}

规则三、FaceFilter

public class FaceFilter implements Filter {@Overridepublic String doFilter(String str) {return str.replace(":)", "^V^");}
}

定义责任链FilterChain

public class FilterChain implements Filter {List<Filter> filters = new ArrayList<Filter>();public FilterChain addFilter(Filter f) {this.filters.add(f);return this;}public String doFilter(String str) {String r = str;for(Filter f: filters) {System.out.println("调用类" + f.getClass().getName());r = f.doFilter(r);}return r;}
}

结束EndFilter

public class EndFilter implements Filter {@Overridepublic String doFilter(String str) {return str + "EndFilter";}
}

Msg加工类MsgProcessor

public class MsgProcessor {private String msg;//Filter[] filters = {new HTMLFilter(), new SesitiveFilter(), new FaceFilter()};FilterChain fc;public FilterChain getFc() {return fc;}public void setFc(FilterChain fc) {this.fc = fc;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String process() {return fc.doFilter(msg);}
}

测试Main

public class Main {public static void main(String[] args) {String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";MsgProcessor mp = new MsgProcessor();mp.setMsg(msg);//第一责任链FilterChain fc = new FilterChain();fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());//第二责任链(相当于一个大的Filter)FilterChain fc2 = new FilterChain();fc2.addFilter(new FaceFilter()).addFilter(new EndFilter());fc.addFilter(fc2);mp.setFc(fc);String result = mp.process();System.out.println(result);}
}

在这里插入图片描述

测试结果

调用类com.bjsxt.dp.filter.HTMLFilter
调用类com.bjsxt.dp.filter.SesitiveFilter
调用类com.bjsxt.dp.filter.FilterChain
调用类com.bjsxt.dp.filter.FaceFilter
调用类com.bjsxt.dp.filter.EndFilter
大家好^V^,[script],,就业,网络授课没感觉,因为看不见大家伙儿EndFilter

请求从前向后过滤,响应从后向前处理,参考https://www.cnblogs.com/ysw-go/p/5432921.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_10430.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tuxera NTFS21Mac苹果电脑读取硬盘磁盘软件

我们经常会使用移动硬盘或 U 盘进行大体积文件的分享、携带。但有时候别人提供的NTFS移动硬盘或者U 盘在 Mac 电脑中只能读取&#xff0c;无法将文件导入到其中。这是因为常见的 NTFS 硬盘格式在 Mac 中不能兼容。 当你从 Windows 转到了 Mac 平台&#xff0c;可能会发现之前用…

RocketMQ-流程图-概念

文章目录RocketMq的角色消息发送的流程RocketMq的角色 Producer&#xff1a;消息的发送者&#xff0c;生产者&#xff1b;举例&#xff1a;发件人Consumer&#xff1a;消息接收者&#xff0c;消费者&#xff1b;举例&#xff1a;收件人Broker&#xff1a;暂存和传输消息的通道…

Python数据分析教程(一):Numpy

数据的纬度 一维数据:列表和集合类型二维数据:列表类型多维数据:列表类型高维数据:字典类型或数据表示格式,如json、xml、yaml维度:一组数据的组织形式列表和数组:一组数据的有序结构Numpy Numpy介绍NumPy是一个开源的Python科学计算基础库,包含:一个强大的N维数组对象…

渗透测试神器Nmap使用教程

渗透测试神器Nmap使用教程1.nmap简介2.常用参数3.nmap实战命令1.nmap简介 Nmap &#xff08;网络映射器&#xff09;是Gordon Lyon最初编写的一种安全扫描器&#xff0c;用于发现计算机网络上的主机和服务&#xff0c;从而创建网络的“映射”。为了实现其目标&#xff0c;Nmap…

java计算机毕业设计基于安卓Android的金融保险app(源码+系统+mysql数据库+Lw文档)

项目介绍 计算机信息技术的发展&#xff0c;推动了金融保险信息化管理的进程&#xff0c;并随着互联网概念的提出&#xff0c;各种互联网软件也应运而生。在传统的管理中&#xff0c;各种信息管理难&#xff0c;传播速度慢&#xff0c;需要耗费很长时间统计核查&#xff0c;不…

Oracel中视图相关概念和操作(一)

目录 1.视图概念&#xff08;有必要&#xff09; &#xff08;1&#xff09;视图基本概念 &#xff08;2&#xff09;视图和定义的表的联系 &#xff08;3&#xff09;视图的优点 2.创建视图 &#xff08;1&#xff09;使用SQL DEVELOPER创建视图&#xff08;可视化&#x…

如何正确的审核交易商牌照?这些雷区你不得不防

对于外汇平台来说&#xff0c;交易牌照可以说是重中之重&#xff0c;一个交易没有牌照&#xff0c;可以说是没有任何约束&#xff0c;属于监管裸奔状态&#xff0c;这种平台10个有10个就是黑平台。但也正因如此&#xff0c;无数黑平台也会在牌照上面做手脚&#xff0c;这些人手…

基于stm32单片机甲醛烟雾温湿度检测仪设计

目录 第1章 绪论 1.1 引言 1.1.1甲醛的特性及危害 1.1.2甲醛的来源 1.2甲醛检测仪的种类 第&#xff12;章 概述 2.1系统总概述 2.2总体方案设计 2.3硬件设计 2.4软件设计 第3章 硬件设计 3.1 硬件设计主电路图 3.2 硬件选择 3.2.1 MCU的选择与简介 3.2.3 …

Gimbal Lock欧拉角死锁问题

技术背景 在前面几篇跟SETTLE约束算法相关的文章(1, 2, 3)中&#xff0c;都涉及到了大量的向量旋转的问题--通过一个旋转矩阵&#xff0c;给定三个空间上的欧拉角\(\alpha, \beta, \gamma\)&#xff0c;将指定的向量绕对应轴进行旋转操作。而本文主要就阐述这些旋转操作中&…

复习十二:广义表

一、广义表的定义及其重要特性 广义表简称表&#xff0c;它是线性表的推广。一个广义表是n(n>0)个元素的一个序列&#xff0c;若n0时&#xff0c;则称为空表&#xff1b; 广义表中有两种数据元素&#xff0c;即有两种结构的结点&#xff1a;表结点和原子结点&#xff1b;广义…

大数据ClickHouse进阶(十一):ClickHouse的Join子句

文章目录 ClickHouse的Join子句 一、连接精度

Springcloud的学习笔记(二)

Springcloud学习笔记(一) 目录8 消费者订单模块9 重构10 Eureka服务注册与发现10.1 Eureka基础知识10.2 EurekaServer服务端安装10.3 支付微服务8001入驻进EurekaServer10.4 订单微服务81入驻进EurekaServer10.5 Eureka集群原理说明10.6 Eureka集群环境构建10.7 订单支付两微服…

ASR6500S SIP模块与SX1262系列集成替代SX1278 SX1262内核+RF前端

ASR6500S是一系列LoRa SIP模块,集成了RF前端和LoRa无线电收发器SX1262系列,支持LoRa 和FSK调制。LoRa技术是一种针对LPWAN应用的低数据速率、超远程、超低功耗通信进行优化的 广谱协议。 ASR6500S设计为电池寿命长,有功接收电流消耗4.2 mA,最大发射功率可达+22dBm。该模块实…

Shell之练习题

目录 一、练习一 1.1、分析 1.2、编辑脚本文件 1.3、测试 二、练习二 2.1、分析 2.2、编辑脚本文件 ​2.3、测试 三、练习三 3.1、分析 3.2、编辑脚本文件 ​3.3、测试 四、练习四 4.1、分析 4.2、编辑脚本文件 4.3、测试​ 一、练习一 需求&#xff1a;给定一…

Python量化交易实战:获取股票数据并做分析处理

量化交易&#xff08;也称自动化交易&#xff09;是一种应用数学模型帮助投资者进行判断&#xff0c;并且根据计算机程序发送的指令进行交易的投资方式&#xff0c;它极大地减少了投资者情绪波动的影响。量化交易的主要优势如下&#xff1a; 快速检测客观、理性自动化 量化交易…

Prompt Learning : Prefix Tuning

Prompt Learning 首先Prompt Learning 称为提示学习&#xff0c;是最近比较火的一种NLP范式&#xff0c;过去“PretrainFinetuning"的模式虽然能够利用预训练语言模型在大规模语料库上的预训练带来的初始优良性能&#xff0c;但是对于不同的NLP任务&#xff0c;比如NER&a…

Day20_脚手架,分析脚手架结构,render()函数

最基本的脚手架下的一个文件夹 1 gitignore git的忽略文件&#xff0c;那些文件或者文件夹不想接收get的管理。 2 babel.config.js babel的控制文件 肯定会涉及到es6 ---> es5&#xff0c;也肯定会借助babel去转换。 3. package.json 包的说明书&#xff0c;包的名…

【小程序从0到1】小程序常用组件一览

欢迎来到我的博客 &#x1f4d4;博主是一名大学在读本科生&#xff0c;主要学习方向是前端。 &#x1f36d;目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 &#x1f6e0;目前正在学习的是&#x1f525;React/小程序React/小程序React/小程序&am…

融合黄金正弦与sigmoid连续化的海鸥优化算法-附代码

融合黄金正弦与sigmoid连续化的海鸥优化算法 文章目录融合黄金正弦与sigmoid连续化的海鸥优化算法1.海鸥优化算法2. 改进海鸥优化算法2.1 Sigmoid 函数收敛因子2.2 全局最优更新连续化2.3 黄金正弦指引机制3.实验结果4.参考文献5.Matlab代码6.Python代码摘要&#xff1a;针对海…

四向车立体库|四向穿梭车AGV如何进行入库和出库?

仓库仓储货架类型多样&#xff0c;存取货方式主要分为以下几种&#xff0c;包括人工存取货、叉车存取货和自动化存取货。如今&#xff0c;很多企业都想实现仓库自动化运作&#xff0c;所以想用自动化仓库货架。比如四向车货架就是自动化仓储货架的一种。那么&#xff0c;四向穿…