深入理解Spring IOC之设计模式篇(一)、委派模式

简介: 深入理解Spring IOC之设计模式篇(一)、委派模式

前言


在说设计模式这个东西之前,我在这里必须强调的是,任何设计模式的使用都要看上下文,不能单纯的为了设计模式而使用设计模式。这一点是很多学设计模式的人都没有正确理解的,很多人往往只看到某些设计模式可以去匹配某些代码,或者说某些设计模式可以用来修改某些代码,比如之前很多人就喜欢去用策略模式去把代码中的if else无脑的干掉,然后自以为写出了优雅的代码,这种被博客刷多了所留下的后遗症真的是让我无力吐槽。


这个思想很重要:设计模式的使用需要看上下文,而不仅仅是可以那段代码。


正文


废话说完了,我们开始我们本篇文章要说的委派模式,这个玩意其实不属于23种设计模式之一的,但它还是面向对象常用的设计模式之一。实际要怎么用,大家可以参考下面的例子了。

委派模式从字面上面理解的话,可以是这样的,指的是在做某件具体的事情的时候,把整个这件事情或者是这个事情的某个部分的交给了他人做,这个事情也许是我整个链路的一部分,但是复杂度比较高的时候或者是已经有别的人能够很好的处理的情况下(注意这是两种情况),我完全可以让别人做,因此委派给别人。

我们来看看我们在之前文章中提到过的spring统一资源加载这里的PathMatchingResourcePatternReslover这个类,由于它实现了ResourcePatternReslover这个接口,而ResourcePatternReslover又继承了ResourceLoader这个接口,因此它必须实现ResourceLoader中getResource这个方法,我们来看看它是怎么实现的:


@Override
      public Resource getResource(String location) {
          return getResourceLoader().getResource(location);
      }


我们再来看看这里面的getResourceLoader方法:


public ResourceLoader getResourceLoader() {
    return this.resourceLoader;
  }


那么这个this.resourceLoader是哪的呢,来看看PathMatchingResourcePatternReslover的构造方法:


public PathMatchingResourcePatternResolver() {
    this.resourceLoader = new DefaultResourceLoader();
  }
  public PathMatchingResourcePatternResolver(ResourceLoader resourceLoader) {
    Assert.notNull(resourceLoader, "ResourceLoader must not be null");
    this.resourceLoader = resourceLoader;
  }


看到这里相信大家已经看明白了吧,PathMatchingResourcePatternReslover的getResource其实就是完完全全的委派给了resourceLoader来做的。Spring其他地方使用这个的还有很多,就不一一列举了。

我们来看看标准的委派模式的代码吧:


public interface Target {
    void doSomeThing();
}



@Component
public class BDelegate implements Target {
    @Override
    public void doSomeThing() {
        System.out.println("B");
    }
}


@Component
public class ADelegate implements Target {
    @Override
    public void doSomeThing() {
        System.out.println("A");
    }
}



@Component
public class Boss implements Target{
    @Autowired
    private List<Target> targets;
    @Override
    public void doSomeThing() {
        targets.forEach(Target::doSomeThing);
    }
}


一个超简单的例子了。稍微增加点解释下哈,实际使用的时候Boss未必要实现Target接口,Boss中的逻辑也可以是段包含着ADelegate或BDelegate的很复杂的逻辑,总之就是Boss自己没干活交给了ADelegate以及BDelegate两个类而已。

目录
相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
9505 60
|
4月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
131 16
|
4月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
128 0
|
4月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
115 0
|
4月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
97 0
|
19天前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
78 0
|
7月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
513 26
|
3月前
|
设计模式 算法 架构师
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
|
4月前
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。