【设计模式】JAVA Design Patterns——Dependency Injection(依赖注入模式)

2024-06-01 1517阅读

🔍目的


依赖注入是一种软件设计模式,其中一个或多个依赖项(或服务)被注入或通过引用传递到一个依赖对象(或客户端)中,并成为客户端状态的一部分。该模式将客户的依赖关系的创建与其自身的行为分开,这使程序设计可以松散耦合,并遵循控制反转和单一职责原则。

🔍解释


真实世界例子

老巫师喜欢不时地装满烟斗抽烟。 但是,他不想只依赖一个烟草品牌,而是希望能够互换使用它们

通俗描述

依赖注入将客户端依赖的创建与其自身行为分开。

维基百科

在软件工程中,依赖注入是一种对象接收其依赖的其他对象的技术。 这些其他对象称为依赖项。

程序示例

创建烟草接口和具体品牌的类:

public abstract class Tobacco {
  private static final Logger LOGGER = LoggerFactory.getLogger(Tobacco.class);
  public void smoke(Wizard wizard) {
    LOGGER.info("{} smoking {}", wizard.getClass().getSimpleName(),
        this.getClass().getSimpleName());
  }
}
public class SecondBreakfastTobacco extends Tobacco {
}
public class RivendellTobacco extends Tobacco {
}
public class OldTobyTobacco extends Tobacco {
}

创建老巫师的类

public interface Wizard {
  void smoke();
}
public class AdvancedWizard implements Wizard {
  private final Tobacco tobacco;
  public AdvancedWizard(Tobacco tobacco) {
    this.tobacco = tobacco;
  }
  @Override
  public void smoke() {
    tobacco.smoke(this);
  }
}

 赠送老巫师任意品牌的烟草:

    var advancedWizard = new AdvancedWizard(new SecondBreakfastTobacco());
    advancedWizard.smoke();

🔍类图


【设计模式】JAVA Design Patterns——Dependency Injection(依赖注入模式)

🔍适用性

依赖注入(Dependency Injection,DI)设计模式适用于许多不同的业务场景,特别是在面向对象编程中,它可以提供许多优势。

  1. 松耦合的组件:当需要将不同组件解耦并使其更容易测试和维护时,依赖注入可以帮助实现这一目标。通过依赖注入,组件可以更灵活地替换其依赖项,从而降低了组件之间的耦合度。

  2. 可测试性:依赖注入允许将依赖项注入到组件中,这样在单元测试时可以轻松地替换真实的依赖项为模拟对象或者桩对象。这样可以更容易地编写单元测试,提高代码的可测试性。

  3. 改变行为:通过依赖注入,可以更容易地改变组件的行为,例如切换实现、调整配置等,而无需修改组件本身的代码。这种灵活性使得依赖注入成为实现可插拔架构的有力工具。

  4. 解耦配置和实现:依赖注入允许将组件的配置信息与其实现分离,这样可以更容易地管理和调整配置,并且可以减少重复的代码。

  5. 提高可扩展性:通过依赖注入,可以更容易地引入新的实现或者功能,而无需修改现有的代码。这有助于提高系统的可扩展性,使其更容易应对变化和需求的增长。

🔍Ending

 依赖注入设计模式是一种强大的工具,可以帮助我们构建松耦合、可测试和易于维护的软件系统。通过深入理解依赖注入设计模式,我们可以更好地应用它到实际的软件开发中,提高代码的质量和可维护性。

希望本文能够帮助读者更深入地理解依赖注入设计模式,并在实际项目中发挥其优势。谢谢阅读!


希望这份博客草稿能够帮助到你。如果有其他需要修改或添加的地方,请随时告诉我。


【设计模式】JAVA Design Patterns——Dependency Injection(依赖注入模式)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]