博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之责任链模式
阅读量:3915 次
发布时间:2019-05-23

本文共 1737 字,大约阅读时间需要 5 分钟。

定义:责任链模式(Chain of Responsibility Pattern) 是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象.当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止.

属于行为型模式

适用场景

1.多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定;
2.在不明确指定接受者的情况下,向多个对象中的一个提交一个请求;
3.可动态指定一组对象处理请求.

优点

1.将请求与处理解偶;
2.请求处理者(节点对象)只需关注自己感兴趣的请求进行处理即可,对于不感兴趣的请求,直接转发给下一级节点对象;
3.具备链式传递处理请求功能,请求发送者无需知晓链路结构,只需等待请求处理结果;
4.链路结构灵活,可以通过改变链路结构动态地新增或删减责任;
5.易于扩展新的请求处理类(节点),符合开闭原则.

缺点

1.责任链太长或者处理时间过长,会影响整体性能;
2.如果节点对象存在循环引用时,会造成死循环,导致系统崩溃;

例子

一般使用
public abstract class Handler {
protected Handler nextHandler; public void setNextHandler(Handler handler){
this.nextHandler = handler; } public abstract void handleRequest(String request);}
public class ConcreteHandlerA extends Handler{
@Override public void handleRequest(String request) {
if("requestA".equals(request)){
System.out.println(this.getClass().getSimpleName() + "deal with request: " + request); return; } if(this.nextHandler != null){
this.nextHandler.handleRequest(request); } }}
public class ConcreteHandlerB extends Handler{
@Override public void handleRequest(String request) {
if("requestB".equals(request)){
System.out.println(this.getClass().getSimpleName() + "deal with request: " + request); return; } if(this.nextHandler != null){
this.nextHandler.handleRequest(request); } }}
public class Test {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA(); Handler handlerB = new ConcreteHandlerB(); handlerA.setNextHandler(handlerB); handlerA.handleRequest("requestB"); }}

转载地址:http://okjrn.baihongyu.com/

你可能感兴趣的文章
【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
查看>>
net下的高性能轻量化半自动orm+linq的《SqlBatis》
查看>>
如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出
查看>>
在 Blazor WebAssembly 中使用 gRPC-Web
查看>>
【实战 Ids4】║ 在Swagger中调试认证授权中心
查看>>
.NET Core开发实战(第10课:环境变量配置提供程序)--学习笔记
查看>>
WTM系列视频教程:View和Taghelper
查看>>
面试官:你连HTTP请求Post和Get都不了解?
查看>>
.NET Core 3.0 即将结束生命周期,建议迁移 3.1
查看>>
开源、免费、企业级的SiteServer CMS .NET CORE 7.0 预览版发布
查看>>
基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...
查看>>
【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇...
查看>>
200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]
查看>>
.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)...
查看>>
对比Java和.NET多线程编程
查看>>
[头脑风暴] 解读Docker Bridge网络模型
查看>>
集成平台集群任务动态分派
查看>>
【.net core】电商平台升级之微服务架构应用实战
查看>>
【翻译】.NET 5 Preview 1 发布
查看>>
使用GUI工具Portainer.io管控Docker容器
查看>>