前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之责任链模式

设计模式之责任链模式

作者头像
九转成圣
发布2024-04-10 18:26:01
980
发布2024-04-10 18:26:01
举报
文章被收录于专栏:csdncsdn

责任链模式(Chain of responsibility)

定义

使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。

使用场景

主要角色

  1. 处理器链HandlerChain
  2. 抽象处理器Handler
  3. 具体处理器

类图

示例代码

数组实现

代码语言:javascript
复制
public interface IHandler {
    boolean handle();
}
代码语言:javascript
复制
public class HandlerA implements IHandler {
    @Override
    public boolean handle() {
        boolean handled = false;
        System.out.println("HandlerA handle()");
        return handled;
    }
}
代码语言:javascript
复制
public class HandlerB implements IHandler {
    @Override
    public boolean handle() {
        boolean handled = false;
        System.out.println("HandlerB handle()");
        return handled;
    }
}
代码语言:javascript
复制
public class HandlerChain {
    private final List<IHandler> handlers = new ArrayList<>();

    public void addHandler(IHandler handler) {
        this.handlers.add(handler);
    }

    public void handle() {
        for (IHandler handler : handlers) {
            boolean handled = handler.handle();
            if (handled) {
                break;
            }
        }
    }
}

链表实现

代码语言:javascript
复制
public abstract class Handler {
    protected Handler nextHandler = null;

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

    public final void handle() {
        boolean handled = doHandle();
        if (nextHandler != null && !handled) {
            nextHandler.handle();
        }
    }

    protected abstract boolean doHandle();
}
代码语言:javascript
复制
public class HandlerA extends Handler {
    @Override
    protected boolean doHandle() {
        boolean handled = false;
        System.out.println("HandlerA doHandle()");
        return handled;
    }
}
代码语言:javascript
复制
public class HandlerB extends Handler {
    @Override
    protected boolean doHandle() {
        boolean handled = false;
        System.out.println("HandlerB doHandle()");
        return handled;
    }
}
代码语言:javascript
复制
public class HandlerChain {
    private Handler head = null;
    private Handler tail = null;

    public void addHandler(Handler handler) {
        handler.setNextHandler(null);
        if (head == null) {
            head = handler;
            tail = handler;
            return;
        }
        tail.setNextHandler(handler);
        tail = handler;
    }

    public void handle() {
        if (head != null) {
            head.handle();
        }
    }
}
代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        HandlerChain chain = new HandlerChain();
        chain.addHandler(new HandlerA());
        chain.addHandler(new HandlerB());
        chain.handle();
    }
}

工作中遇到场景

适配器模式在Spring框架中有多个应用场景,其中一些主要体现在以下方面:

  1. HandlerAdapter: 在Spring MVC中,HandlerAdapter 接口和其实现类用于适配不同类型的处理器(Controller)。不同的Controller可能有不同的接口,而HandlerAdapter负责将它们适配到Spring MVC框架中,以便它们能够正确处理请求。不同的HandlerAdapter实现适配不同类型的Controller,如SimpleControllerHandlerAdapterHttpRequestHandlerAdapter等。
  2. MessageListenerAdapter: 在Spring的消息处理中,MessageListenerAdapter 用于将普通的Java对象转换为消息监听器。通过适配器模式,可以将接收到的消息传递给目标对象的特定方法进行处理。
  3. JDBC适配器: Spring的JdbcTemplateNamedParameterJdbcTemplate 等类使用了适配器模式,将JDBC的底层操作适配到Spring的数据访问框架中,使得开发者可以更方便地使用JDBC进行数据库操作。
  4. Advisor适配器: 在Spring AOP中,AdvisorAdapter 接口定义了如何适配不同类型的通知(Advice)。Spring通过适配器模式将不同类型的通知适配到切面(Aspect)中,从而实现对不同通知的灵活支持。
  5. HandlerInterceptor适配器: Spring MVC中的HandlerInterceptor 接口定义了拦截器的方法。不同的拦截器可能只实现了其中的某些方法,而适配器模式用于适配这些拦截器,使得它们只需要实现自己关心的方法。

总体而言,Spring框架中广泛使用适配器模式来处理不同接口之间的适配问题,使得不同的组件、框架或者接口能够协同工作,提供更灵活、可扩展的组件集成。适配器模式有助于降低组件之间的耦合度,同时提高了系统的可维护性和可扩展性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 责任链模式(Chain of responsibility)
  • 定义
  • 使用场景
  • 主要角色
  • 类图
  • 示例代码
    • 数组实现
      • 链表实现
      • 工作中遇到场景
      相关产品与服务
      云顾问
      云顾问(Tencent Cloud Smart Advisor)是一款提供可视化云架构IDE和多个ITOM领域垂直应用的云上治理平台,以“一个平台,多个应用”为产品理念,依托腾讯云海量运维专家经验,助您打造卓越架构,实现便捷、灵活的一站式云上治理。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档