【摘要】 Dependency Inversion Principle , DIP ****************************************************************************************** 表述: 1. Abstractions should not depe...
Dependency Inversion Principle , DIP
******************************************************************************************
表述:
1.Abstractions should not depend upon details, details should depend upon abstractions.
2.Program to an interface, not an implementation.
3.面向接口编程。
4.抽象不应依赖具体,具体应依赖抽象。
5.针对接口编程,而不是针对实现编程。
传统的依赖VS.倒置的依赖。
面向接口编程的意思是说,应当使用接口和抽象类进行变量的类型声明,参数的类型声明,方法的返还类型声明,以及数据类型的转换等。
不要针对实现编程的意思就是说,不应当使用具体类进行变量的类型声明,参数类型声明,方法的返还类型声明,以及数据类型的转换等。要保证做到这一点,一个具体的类应只实现接口和抽象类中声明过的方法,而不应发布(public)另外的方法。只要一个被引用的对象存在抽象类型,就应当在任何引用此对象的地方使用抽象类型,包括参数的类型声明,方法返还类型的声明,属性变量的类型声明等。
一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中。而有些语言(如Java)都限制一个类只能从最多一个超类继承,因此将抽象类作为类型定义工具的效能大打折扣。反过来,看接口,就会发现:任何一个实现了一个接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个接口。然而,如果一个类需要实现两个接口,而这两个接口中存在相同signature的函数,则又当如何?:)<