首页 > 代码库 > 设计模式之禅-依赖倒置原则
设计模式之禅-依赖倒置原则
个人blog 此篇博文地址:http://www.sanyinchenblog.com/?p=167
依赖倒置原则(DIP): demo(https://github.com/sanyinchen/UMLDemo) 1.高层模块不应该依赖底层模块 2.抽象不应该依赖细节 3.模块间的依赖不是通过实现类发生的,而是由抽象类发生的 4.接口或者抽象类不依赖于细节 5.实现类依赖于接口或抽象类 书中给出的demo是Driver(司机)开Car(车)的场景。 从uml图中我们可以很清楚的看到ICar和Idriver这两个接口存在耦合,而不是实现类存在耦合,这样的好处就是,在司机开车这个大前提下,可以让司机开不同的车。 我们来看一下client场景类:
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub IDriver driver=new Driver(); ICar car=new BMW(); driver.driver(car); car=new Benz(); driver.driver(car); } }我们可以很明显的看到car new出了两辆不同的车,但是Driver并没有做任何修改就可以开动两辆不同的车。 在这里,Driver类就是高层模块,当我们替换底层模块car时,仍然不会影响到Driver类的运行 依赖的写法: (1)接口声明(就是demo的那种写法) (2)构造函数注入 (3)set注入 依赖倒置原则优点以及操作方式: (1) 实现了各个实体类之间的解耦,利于平行开发和测试 (2)每个类尽量都有接口或者抽象类,或者抽象类和接口两者皆可(这是依赖倒置原则的基本要求,有了抽象才能产生倒置依赖) (3)变量的表面类型尽可能是接口或者抽象类型 (4)任何类都不应该从实体类中派生 (5)尽量不要覆写抽象类的方法(依赖倒置原则提倡的是抽象部分依赖,如果覆写了抽象部分则对程序的稳定性会有影响) (6)结合里氏替换原则使用(接口负责定义public属性和方法,并且声明与其他类之间的依赖关系,抽象类负责公共部分的的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化) 最后说一下何为倒置,一般来说的面向实现编程就是每个实体类进行实实在在的依赖,一般都会这么想,把这个可以理解为正置,那么我们现在是实体类之间并不产生依赖,而是通过抽象类进行依赖,然后由实体类来实现那些互相依赖的抽象类
设计模式之禅-依赖倒置原则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。