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.
高层模块不应依赖低层模块,高层模块和低层模块应该通过抽象和互相依赖,抽象不要依赖于具体细节,具体实现细节依赖抽象。
可以将调用链中的调用方理解为高层,被调用方理解为低层。