.net 程序员对面向对象设计原则以及设计模式的重视似乎不如Java,包括许多有经验.net的程序员,也并没有将面向对象的思想渗透进项目中。我本身就是这样一个例子。C#和Java都是面向对象的语言,设计模式对两者是通用的,今天就来谈一谈我对面向对象设计原则之一—依赖倒置原则的理解,之所以选择这个原则,因为之前对这个原则的理解很是模糊。
首先,依赖倒置的标准定义:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
这个定义听得人云里雾里,不知所云。究其原因,是几个概念不清楚。
1、依赖,什么叫依赖?
依赖是程序模块(普通类、抽象类、接口)的一种关系,主要包括以下几种情况。
a、ClassA中某个方法的参数类型是ClassB; 这种情况成为耦合;
b、ClassA中某个方法的参数类型是ClassB的一个属性; 这种情况成为紧耦合;
c、ClassA中某个方法的实现实例化ClassB;
d、ClassA中某个方法的返回值的类型是ClassB;
2、倒置,为什么叫倒置?
倒置是相对于我们的一般思路而言的。一般情况下,高层模块是依赖低层模块的。比如A书高层模块类,B是低层模块类,如果A调用B,那就要再A中实例化一个B的对象。这样,A就会依赖B。而依赖倒置做的就是要解除这种依赖,用的方法就是两者都依赖于抽象。