闲谈设计模式之依赖倒置原则
依赖倒置原则(Dependence Inversion Principe)
依赖倒置原则:俗称DIP,其含义为高层和底层不能直接依赖,而是通过依赖抽象,而抽象不依赖与细节,细节依赖于抽象。
通过这种方式,仅需要将抽象实例化,高层对底层调用或者通信,仅仅调用抽象的实例,通过这样的方式减少高层与底层的耦合性,达到解耦的作用。
代码示例
接下来以Android设计源码模式中的示例代码进行分析。
Android源码设计模式示例代码
不知道大家是否还记得此图:
这张图不是OCP示例中的UML图吗?对的,但它也能体现出DIP,把ImageLoader看成是高层模块对网络中的图片地址进行下载选择相应的缓存模式加载图片缓存图片。那么缓存模式ImageCache就可以看成底层模块,但是这一底层模块是一个抽象的类型,通过开发人员设置不同或者实现不同的ImageCache进行实例化。而ImageCache本身就是一个抽象,不依赖于任何的细节的实现。
相关代码如下:
public class ImageLoader {
//获取图片缓存
ImageCache imageCache = null;
public void setImageCache(ImageCache imageCache) {
this.imageCache = imageCache;
}
}
public interface ImageCache {
void put(String url, Bitmap bitmap);
Bitmap get(String url);
}
结合OCP、LSP、DIP都不难看出其重点核心思想就是抽象。
总结
OCP、LSP、DIP共有一个核心思想就是抽象解耦,但是OCP注重与内部不可修改对于新的特性和功能可通过拓展的形式去解决;而LSP在于子类被当作父类使用的时候,其子类的行为特性是不变的,避免影响现有程序的功能特性的重要原则;DIP核心就是利用抽象的实现,使得高低层的通信是该实现负责去处理,减低高低层耦合度,避免耦合冗重。