控制反转

IoC(Inversion of Control,控制反转),不是一种技术,而是一种设计思想。

说下控制,指的是对程序执行流程的控制。

说下正转和反转:

  • 正转:传统的程序是我们在对象中主动获取依赖对象
  • 反转:容器帮我们创建和注入依赖对象

总结下:对流程的控制由程序员变成了 IoC 容器框架控制。

依赖注入

说到了 IoC 还得说下 DI(Dependency Injection,依赖注入):和 IoC 不同,DI 是一种具体的编码技巧。

一句话概括:不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用

依赖反转

DIP(Dependency Inversion Principle,依赖反转原则「依赖倒置原则」)。

High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstractions.

高层模块不应依赖低层模块,高层模块和低层模块应该通过抽象和互相依赖,抽象不要依赖于具体细节,具体实现细节依赖抽象。

可以将调用链中的调用方理解为高层,被调用方理解为低层。