设计原则-依赖倒转原则

前端之家收集整理的这篇文章主要介绍了设计原则-依赖倒转原则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现.

依赖倒转原则: 抽象不应该依赖于细节,细节应该依赖于抽象. 换言之,要针对接口编程,而不是针对实现编程.

依赖倒转原则要求我们在程序代码中传递参数时,或者在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明,参数类型声明,方法返回类型声明,以及数据类型的转换等,而不要用具体类做这些事情. 为了确保该原则的应用,一个具体类应当只是实现接口或抽象类中声明的过的方法,而不要给出多余的方法,否则将无法调用在子类中增加的新方法.

在引入抽象层之后,系统将具有很好的灵活性,在程序中尽量使用抽象层进行编程,而将具有具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件中(针对java),而无需修改原有系统的源代码,在不修改的情况下扩展系统的功能,满足开闭原则的要求.

在实现一来倒转原则时候,我们需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中,依赖注入指当一个对象要与其它对象发生一来关系时,通过抽象来注入所一来的对象. 通常的注入方式有三种: 构造注入,设值注入(setter),接口注入. 构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。

如下图,某系统经常要存储不同格式的文件数据库中,一次要进行数据格式的转换. 如图的方式,如果增加一种文件格式,就需要修改CustomerDAO文件,不符合开闭原则.

针对上图的问题,可以在CustomDAO与文件转换的类之间引入一个抽象类,CustomerDAO持有抽象类,具体的文件处理实现抽象类,...,如下图所示.

在上述的重构过程中,用到了开闭原则,里氏代换原则,依赖倒转原则,在大多数情况下,这三个设计原则会同时出现,开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段,他们相辅相成,相互补充,目标一致,只是分析问题时候的角度不同而已.

Reference: http://www.jb51.cc/article/p-rgjlfuzg-bao.html

猜你在找的设计模式相关文章