1、什么是依赖倒置原则
- 高层模块不应该依赖于低层模块,两者都应该依赖于抽象;
- 抽象不应该依赖于细节;
- 细节应该依赖于抽象;
2、高层依赖于底层示例
山寨手机的主板制造依赖于具体的某摄像头型号、收音机模块、播放器模块、点火模块、投影仪模块;
类似这样从上向下的依赖关系是非常脆弱的,因为任何底层模块发生变化,都将从下而上的影响整个产品链。
3、依赖倒置示例
在山寨手机出现了问题后,专业手机生产制造商们,和基础元件的供应商一起举行了移动平台高峰论坛,共同制定了手机行业的统一标准接口。不管苹果、三星、小米等手机制造商,还是蔡司镜头、三洋电池、等基础元件的供应商,都根据制定的行业标准接口生产产品,上层的制造商和低层的供应商都依赖于标准的接口,这样才能实现手机制造、组装的灵活性。
现实生活中还有电脑的组装等,都是依赖倒置的例子。
4、原理
依赖倒置的核心思想是面向接口编程。
相对于细节的多变性,科学合理的抽象要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在大多数软件设计中,抽象是指接口或抽象类,细节就是实现了接口或继承了抽象类的子类,使用接口或者抽象类的目的是定制好规范和契约,而不去涉及任何具体操作,把细节的展现任务交给他们的子类去实现。
尽可能的制定良好的抽象、接口规范,如果类之间如果要发生依赖,那么依赖于抽象接口更加稳定且利于扩展。
5、面向接口编程 – 示例
- 工厂方法模式
- 观察者模式
- 状态模式等等
工厂方法模式:
不同的产品依赖于接口,不同的工厂依赖统一的接口
观察者模式:
观察者依赖于统一接口,实现了update通知方法,提供被通知的行为
状态模式:
不同的状态类依赖于统一的接口,实现了接口中抽象的共同行为,等待被传递及调用
其他模式中的接口