High level modules should not depend upon low level modules.Both shoud depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
1.高层模块不应该依赖底层模块,两者都应该依赖其抽象.
2.抽象不应该依赖细节.
3.细节应该依赖抽象.
在java语言中的表现为:
1.模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的.
2.接口或抽象类不依赖于实现.
3.实现类依赖接口或抽象类.
更加精简的定义就是"面向接口变成"---OOD(Object-Oriented Design,面向对象设计)的精髓之一.
具体的,只要遵循以下的几个规则就可以:
1.每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备.
2.变量的表面类型尽量是接口或者抽象类
3.任何类都不应该从具体类派生
4.尽量不要覆写基类的方法.
5.结合里氏替换原则使用.