控制反转、依赖反转、依赖注入的理解

SOLID原则:单一职责、开闭原则、里氏替换、接口隔离、依赖反转;而在开发过程中也经常说到控制反转,依赖注入等名词;本章会根据自己理解,来说明这几个概念的区别与联系。

一、控制反转(IOC)

通过框架提供一个可扩展的代码骨架,用来组装对象、管理整个执行流程。在后续利用框架进行开发的时候,只需要往预留的扩展点上,添加跟自己业务相关的代码,就可以利用框架来驱动整个程序流程的执行。
这里的控制是指对程序流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程可以通过框架来控制。流程的控制权由程序员“反转”到了框架。 比如设计及模式中的模板模式。
控制反转并不是一种具体的实现技巧,更多的是用来指导框架层面的设计思想。

二、依赖注入(DI)

Dependency Injection,依赖注入是一种具体的编码技巧。概述:不通过new()的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。
依赖注入可以和像工厂模式,抽象工厂模式,build等设计模式很好的工作;提高了代码的扩展性和灵活性。它也是编写可测试性代码的最有效手段。

a. 依赖注入框架(DI Framework)

依赖注入本身只是让对象实例的创建发生在程序的更上游;并不能减少创建那部分代码,而这部分代码本身的价值不大;依赖注入框架的作用就是消除这部分代码。
在使用“依赖注入框架”时,我们只需要通过依赖注入框架提供的扩展点,配置一下所有需要创建的类对象、类与类之间的依赖关系,就可以利用框架来自动实现对象的创建、对象生命周期的管理、依赖注入等工作。

依赖注入是控制反转容器的一种表现形式,它只是表述更具体且更有针对性。如Spring框架的控制反转主要是通过依赖注入来实现的。

三、依赖反转原则(DIP)

Dependency Inversion Principle, 也叫依赖倒置原则。原则描述:高层模块(high-level modules)不要依赖低层模块(low-level)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖;除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。
在整个调用链中,调用者属于高层,被调用者属于低层;在平时业务开发时,高层模块依赖底层模块是没有任何问题的。该原则主要用于指导框架层面的设计跟前面讲的控制反转类似
例子:
Tomcat 是运行 Java Web 应用程序的容器。我们编写的 Web 应用程序代码只需要部署在 Tomcat 容器下,便可以被 Tomcat 容器调用执行。按照之前的划分原则,Tomcat 就是高层模块,我们编写的 Web 应用程序代码就是低层模块。Tomcat 和应用程序代码之间并没有直接的依赖关系,两者都依赖同一个“抽象”,也就是 Sevlet 规范。Servlet 规范不依赖具体的 Tomcat 容器和应用程序的实现细节,而 Tomcat 容器和应用程序依赖 Servlet 规范。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值