抽象不应该依赖细节,细节应该依赖于抽象。
高层模块不应该依赖于低层模块,两个都应该依赖于抽象。
说白了就是针对接口编程,不要对实现编程。
具体见代码 code example
把程序控制权交给第三方。
不通过 new() 的方式在类内部创建依赖类对象, 而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。
例如 Spring 框架
-
控制反转是一种编程思想,把控制权交给第三方。依赖注入是实现控制反转最典型的方法。
-
依赖注入(对象)的方式要采用“基于接口而非实现编程”的原则,说白了就是依赖倒转。
-
底层的实现要符合里氏替换原则。子类的可替换性,使得父类模块或依赖于抽象的高层模块无需修改,实现程序的可扩展性。
《大话设计模式》
