设计模式--6大原则--依赖倒置原则

发布时间:2016-12-7 3:51:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"设计模式--6大原则--依赖倒置原则",主要涉及到设计模式--6大原则--依赖倒置原则方面的内容,对于设计模式--6大原则--依赖倒置原则感兴趣的同学可以参考一下。

依赖倒置原则(Dependence Inversion Principle),简称DIP 定义 High level modules should depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions. 即 1、高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口) 2、抽象(抽象类或接口)不应该依赖于细节(具体实现类) 3、细节(具体实现类)应该依赖抽象   抽象:即抽象类或接口,两者是不能够实例化的 细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化   而依赖倒置原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是6个设计原则中最难以实现的了,如果没有实现这个原则,那么也就意味着开闭原则(对扩展开发,对修改关闭)也无法实现。 依赖倒置有三种方式来实现 1、通过构造函数传递依赖对象 比如在构造函数中的需要传递的参数是抽象类或接口的方式实现。 2、通过setter方法传递依赖对象 即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象 3、接口声明实现依赖对象 例如下面的例子 涂涂是个女僧 ? public class Tutu {     //涂涂是个女孩,会煮面     public void cook(Noodles noodles)     {         noodles.eat();     } } 面条(目前只会煮面) ? public class Noodles {     //吃面条     public void eat()     {         System.out.println("涂涂吃面条...");     } } 涂涂坐在家里吃面(场景类) ? public class Home {     public static void main(String args[])     {         Tutu tutu = new Tutu();         Noodles food = new Noodles();         tutu.cook(food);     } } 运行结果:涂涂吃面条...   但是这有个问题,涂涂只会做面条,不可能每次都吃面条吧,天天吃面吃死你,所以在上面的Tutu类中的cook方法中,如果涂涂会做其他吃的,那岂不是更好。于是她向家庭主妇迈进了一步,使用了依赖倒置原则。 也就是涂涂通过学习还可以焖米饭,炒鱿鱼(虽然听着不爽,但是很好吃),京酱肉丝啊等等。要想在代码中实现,就需要实现两个接口:ITutu和IFood ? public interface ITutu {     //这样就会做很多饭菜了     public void cook(IFood food); } 实现类 ? public class Tutu implements ITutu {       @Override     public void cook(IFood food) {         food.eat();     }   } 食物接口 ? public interface IFood {     public void eat(); } 这样就为扩展留出了很大的空间,方面扩展其他的类。也不会对细节有变动。以后涂涂想吃什么学一下就可以自己做了 实现面条 ? public class Noodles implements IFood {       @Override     public void eat() {         System.out.println("涂涂吃面条...");     }   } 实现米饭 ? public class Rice implements IFood {       @Override     public void eat() {         System.out.println("涂涂吃米饭(终于吃上米饭了)...");     } } 场景类:涂涂在家里开吃了,想吃什么直接做就是了 ? public class Home {     public static void main(String args[])     {         //接口使不能实例化滴         ITutu tutu = new Tutu();         //实例化米饭,涂涂可以吃米饭了         IFood rice = new Rice();         //吃面条         //IFood noodles = new Noodles();         tutu.cook(rice);     } } 这样各个类或模块的实现彼此独立,不互相影响,实现了模块间的松耦合。 from:http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html

上一篇:HTML5 Canvas 图像动画的实现(实例小球弹跳)
下一篇:linux下svn的使用

相关文章

相关评论