what:High level modules should note depend upon low level modules.both should depend
高层模块不应该依赖底层模块,两者都应该其抽象
抽象不应该依赖细节
细节应该依赖抽象
模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,起依赖关系是通过接口或抽象类产生。
接口或抽象类不依赖于实现类
实现类依赖接口或抽象。
How:
1.构造函数传递依赖对象
2.setter方法传递依赖对象
3.接口生命依赖对象
why:
每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备
变量的表面类型尽量是接口或者抽象类
任何类都不应该从具体类派生
尽量不要覆写基类
结合里氏替换原则使用