0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

案例解析依赖注入和控制反转

西西 来源:博客园 作者: 大壮他哥 2020-10-30 15:53 次阅读

什么是依赖注入

依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。

什么是控制反转

在解释什么是控制反转的之前我们先引入上一篇博文一个博友在评论中提的问题:依赖注入和控制反转不是一回事吗?

在我看来,控制反转这种思想最终的实现要依赖与依赖注入这种实现方式。控制反转只是把高低层的关系发生变化,以前底层模块在实现功能的时候可能会依赖于高层模块,通过控制反转可以让底层模块依赖于一个接口,如果这个时候高层模块要使用底层模块的话就必须

实现这个接口,然后通过依赖注入的方式把高层模块的实现类注册到底层模块中使用。

有可能上面的解释大家比较懵,下面我会通过举例来进一步介绍控制反转这种设计模式。

一个例子理解控制反转

从上图可以看出驾驶者依赖“汽车“和“火车”这两个类,如果驾驶员需要开汽车话的就需要实例化一个汽车类,需要开火车的话则需要实例化一个火车类

//开汽车

汽车 cat=new 汽车();

cat.Stop();

//开火车省略。。

这个时候如果说我们需要开飞机怎么办?传统做法则是新建一个飞机类,然后在驾驶者直接实例化飞机类即可。

控制反转

我们暂把上图的框架成为“自动驾驶系统”,现在“自动驾驶系统”已经拥有了自动开汽车、开飞机、开火车的功能了,你觉得已经很强大了,于是把这套系统卖给了某个公司,但是这家公司的业务不仅限于前三种交通工具,现在这家公司要实现驾驶者可以驾驶飞船,如下图所示

大家可以看到如果我们的“自动驾驶系统”要实现可以驾驶飞船的话,就需要驾驶者创建“飞船”的对象,这个时候我们的框架还是依赖于外部(因为飞船类在客户那边)。这个就是我们常说的底层模块依赖于高级模块。这种依赖肯定是不行的,随着客户的变化就要改动我们的框架,这种做法肯定不行,我们继续演变。

现在我们的驾驶者并不直接依赖于某个具体实现类,而且依赖于接口,但是这个时候上图就暴露了一个问题,希望大家先不要看下面的文字,大家可以先思考下上图有什么问题。(上图三个交通工具和接口的关系标识错了,应该是实现)

上图的设计虽然解决了不用New具体那个对象的问题,但是新的问题也随之而来:驾驶者到底使用哪个实现类?大家都知道接口是不能直接实例化的,能够实例化的只有接口的具体的实现类。OK,为了解决这个问题我们继续演变

上图我们使用工厂模式,这时候的关系是驾驶者依赖与工厂类,由工厂类具体去创建具体的实现类。根据上图我们再看如果我们实现开飞船,那么它们之间的关系会发生什么样的变化(上图三个交通工具和接口的关系标识错了,应该是实现)

通过一系列演化,现在两者之间的关系已经彻底发生了改变,以前是底层模块(框架)依赖于高层模块,现在变成了高层模块依赖于底层模块,从上图可以看出,无论你是要开飞船还是开火箭,只要你实现了“交通工具”接口,那么我就可以在工厂类里面给创建出来。这样一来不仅增加了我们系统的可扩展性,也提高了我们系统的整体稳健型。

最后来总结一下到底什么是控制反转,我的答案已经在文章开头给出了,下面给出维基百科的答案:

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 面向对象
    +关注

    关注

    0

    文章

    64

    浏览量

    9983
  • 控制反转
    +关注

    关注

    0

    文章

    1

    浏览量

    923
收藏 人收藏

    评论

    相关推荐

    什么是电机正反转?电机正反转主要应用在哪些方面?

    能力。 电机正反转的基本原理 电机正反转的实现主要依赖于电机的控制方式。在交流电机中,通过改变电源的相序或使用变频器改变电源的频率和相位,可以实现电机的正
    的头像 发表于 10-24 13:56 1316次阅读

    drv8412是怎么控制电机正反转的?

    请问drv8412是怎么控制电机的正反转,谢谢
    发表于 09-20 07:13

    无刷电机正反转由什么控制

    无刷电机(Brushless DC Motor, BLDC)是一种没有电刷的电机,它通过电子换向器来控制电流的流向,从而实现电机的转动。无刷电机的正反转控制是其应用中的一个重要方面,涉及到电机的驱动
    的头像 发表于 09-03 14:14 675次阅读

    如何将行程开关接入正反转控制电路

    行程开关是一种常见的限位开关,用于控制机械设备的行程。在正反转控制电路中,行程开关可以用于实现自动控制,当设备到达预定位置时,自动切换到反向运动。以下是将行程开关接入正
    的头像 发表于 08-26 16:35 631次阅读

    ESP32控制舵机的正反转原理是什么

    舵机是一种将电信号转换为机械运动的设备,广泛应用于机器人、无人机、汽车等领域。ESP32是一款功能强大的微控制器,具有丰富的外设接口和高性能的处理能力,可以方便地控制舵机实现正反转等动作。本文将介绍
    的头像 发表于 08-20 09:13 1038次阅读

    变频器控制电机的正反转控制方式有哪些?

    变频器是一种广泛应用于工业领域的电力调整设备,它可以通过改变电源的频率来实现电机的速度控制。在许多生产过程中,电机的正反转控制是非常重要的,变频器能够通过不同的控制方式来实现这一功能。
    的头像 发表于 08-14 17:04 1629次阅读

    简单介绍plc如何控制电机正反转

    PLC(可编程逻辑控制器)控制电机正反转的过程可以通过以下步骤清晰地表示和归纳: 一、了解电机正反转工作原理 电机正反转是指电机能够实现顺时
    的头像 发表于 07-29 10:37 933次阅读

    两相正反转开关怎么接线方法

    两相正反转开关是一种常见的电气设备,主要用于实现电动机的正反转控制。在实际应用中,正确接线是保证设备正常运行的关键。本文将介绍两相正反转开关的接线方法,包括原理、步骤和注意事项。 一、
    的头像 发表于 07-19 10:48 3272次阅读

    v20变频器控制电机反转怎么调

    以下是一些关于V20变频器控制电机反转的基本步骤和注意事项。 确认电机和变频器的型号和规格是否匹配。 确保电机和变频器的接线正确,包括电源线、控制线和电机线。 检查变频器的设置,确保其工作在正确
    的头像 发表于 06-18 09:46 2317次阅读

    PLC控制电动机正反转电路的工作原理

    在工业自动化控制中,电动机作为动力源,其正反转控制是常见的控制需求。传统的电动机正反转控制主要
    的头像 发表于 06-17 09:37 1950次阅读

    直流电机正反转控制方式

    直流电机,作为一种将直流电能转化为机械能的电动机,广泛应用于各种工业和民用领域。在实际应用中,经常需要实现直流电机的正反转,以满足不同的工作需求。本文将详细介绍直流电机正反转的实现方法,包括基本原理、控制方式和具体应用案例,以期
    的头像 发表于 06-04 17:20 4638次阅读

    什么是离子注入?离子注入的应用介绍

    离子注入是将高能离子注入半导体衬底的晶格中来改变衬底材料的电学性能的掺杂工艺。通过注入能量、角度和剂量即可控制掺杂浓度和深度,相较于传统的扩散工艺更为精确。
    的头像 发表于 02-21 10:23 5022次阅读
    什么是离子<b class='flag-5'>注入</b>?离子<b class='flag-5'>注入</b>的应用介绍

    详细解析二相电机反转的改变方法

    详细解析二相电机反转的改变方法  二相电机反转是指通过改变电机的工作方式和接线方式来改变电机的旋转方向。以下是对二相电机反转的改变方法的详细解析
    的头像 发表于 01-23 14:45 2673次阅读

    一种扩展Spring控制反转的绝妙方法

    类型等于JSON,我就用JSON解析器,那如果新加一个类型的解析器,是不是调用的客户端还要修改呢?这显然太耦合了,本文就介绍一种方法,服务定位模式Service Locator Pattern来解决,它帮助我们消除紧耦合实现及其依赖
    的头像 发表于 01-10 09:41 447次阅读

    plc怎么控制伺服电机正反转

    电机的正反转,本文将详细介绍其中的几种方法。 一、硬件控制 开关控制:最简单的方法是使用开关控制伺服电机的正反转。通过将开关接入PLC的输入
    的头像 发表于 12-25 11:16 4247次阅读