首页 > 其他分享 >IOC控制反转

IOC控制反转

时间:2023-05-25 12:44:06浏览次数:16  
标签:控制 依赖 对象 反转 齿轮 之间 IOC

1、IOC理论的背景

我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。

如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。
齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。

耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中,很多的J2EE项目均采用了IOC框架产品Spring。

2、什么是控制反转

IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。
1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦

3、IOC的别名:依赖注入(DI)

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

标签:控制,依赖,对象,反转,齿轮,之间,IOC
From: https://www.cnblogs.com/october-sy/p/17430832.html

相关文章

  • [golang]利用casbin做常规的权限控制
    Casbin是一个流行的Go语言开源权限管理库,用于实现基于角色的访问控制(RBAC)模型和其他常见的访问控制模型。它提供了一种简单而强大的API,可用于定义和执行各种类型的策略,包括访问控制列表(ACL)、角色访问控制(RBAC)和层次授权(ABAC)等。在本文中,我们将介绍Casbin的核心概念、使用方法和常见......
  • vue3+vite build打包删除控制台打印
    很简单,直接在vite.config.ts里面添加配置即可:exportdefault({mode})=>defineConfig({build:{minify:"terser",terserOptions:{compress:{//生产环境时移除consoledrop_console:true,drop_debugger:true,......
  • GE控制器WES5123-1200,WES5123-2600
    W;① ⑧ 0  ③  0 ①  7  ⑦ 7 5 ⑨  GE控制器WES5123-1200,WES5123-2600,WES5162-9101,IC695CPU320-HS,DS200DCFBG1BLC,IS420ESWBH3A,IC695CRU320-EJ,IS420ESWBH2A,DS200TCPDG2BECIC695CPU315-CD,fdevelopmentinthesensorindustry.当电力系统中的电力......
  • 2.7 控制与数据的结合
    理解指针每一个指针都对应一个类型。这个类型表明该指针指向哪一类对象。如果对象类型为T,那么指针类型为T*,特殊的void*类型代表通用指针。每一个指针都有一个值。这个值时某个指定类型的对象的地址。指针用‘&’运算符创建。这个运算符可以应用到任何lvalue类的C表达式上,lvalu......
  • 变量、流程控制与游标
    变量、流程控制与游标作者:FL博客:https://www.cnblogs.com/flblogs/注意:本笔记部分参考尚硅谷-宋红康1.变量MySQL中的变量是一种可以在SQL语句中动态存储和传递数据的机制。与其他编程语言类似,在MySQL数据库中,变量分为系统变量以及用户自定义变量。常量:字符串常量......
  • 手写IOC
    varcontainer=newMyContainer();container.RegisterType<ILanguage,Chinese>();//使用别名注册container.RegisterType<ILanguage,Englisth>("english");varlanguage=container.Resolve<ILanguage>();varenglish=contain......
  • 成本控制域CN01和8000有不同的元素业务
    如果需分配编号的成本要素在界面中缺失,可采用T-CODE:SE38执行RKTKA04C程序进行处理。   ......
  • C++拷贝控制技术
    模板特例如何写忘了拷贝noexcept 如果可以确认不会抛出异常,交换两个指针就行了swap是命名空间里的某个,更改的时候需要加上该命名空间 特例函数怎么写,就这样。inline的位置值得注意"=”运算符重载 两种拷贝一致 不可拷贝的方式编译器会想方设法为我们......
  • Pelco-D控制协议
    1、通令参数:标准速率为4800bps,无校验, 8位数据位,1位停止位2、命令串格式:一个PTZ控制命令为7字节的十六进制代码,格式如下:Word 1Word2Word3Word4Word5Word6Word7同步字节地址Command 1Command(指令码) 2Data(数据) 1Data2......
  • CSS:页面美化和布局控制和选择器
    CSS:页面美化和布局控制和选择器概念:CascadingStyleSheets层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效好处:功能强大将内容展示和样式控制分离降低耦合度。解耦让分工协作更容易提高开发效率CSS的使用:CSS与html结合方式内联样式在标签内使用style属......