依赖倒置原则(DIP)--深度剖析--面向对象设计(OOD)
来源:互联网 发布:mac safari开启无痕 编辑:程序博客网 时间:2024/04/30 04:57
定义
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个设计原则中最难以实现的了,如果没有实现这个原则,5自学网,那么也就意味着开闭原则(对扩展开发,对修改关闭)也无法实现。
依赖倒置有三种方式来实现
1、通过构造函数传递依赖对象
比如在构造函数中的需要传递的参数是抽象类或接口的方式实现。
2、通过setter方法传递依赖对象
即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象
3、接口声明实现依赖对象
例如下面的例子
涂涂是个女僧
public class Tutu {
}
面条(目前只会煮面)
public class Noodles {
}
涂涂坐在家里吃面(场景类)
public class Home {
}
运行结果:涂涂吃面条...
但是这有个问题,涂涂只会做面条,不可能每次都吃面条吧,天天吃面吃死你,所以在上面的Tutu类中的cook方法中,如果涂涂会做其他吃的,那岂不是更好。于是她向家庭主妇迈进了一步,使用了依赖倒置原则。
也就是涂涂通过学习还可以焖米饭,炒鱿鱼(虽然听着不爽,但是很好吃),京酱肉丝啊等等。要想在代码中实现,就需要实现两个接口:ITutu和IFood
public interface ITutu {
}
实现类
public class Tutu implements ITutu {
}
食物接口
public interface IFood {
}
这样就为扩展留出了很大的空间,方面扩展其他的类。也不会对细节有变动。以后涂涂想吃什么学一下就可以自己做了
实现面条
public class Noodles implements IFood {
}
实现米饭
public class Rice implements IFood {
}
场景类:涂涂在家里开吃了,想吃什么直接做就是了
public class Home {
}
这样各个类或模块的实现彼此独立,不互相影响,实现了模块间的松耦合。
- 依赖倒置原则(DIP)--深度剖析--面向对象设计(OOD)
- 面向对象设计原则二:依赖倒置原则(DIP)
- OOD设计原则之依赖倒置原则(DIP)
- 面向对象设计原则--依赖倒置原则(DIP)
- 替换原则(LSP)--深度剖析--面向对象设计(OOD)
- 面向对象的设计原则---依赖倒置原则(DIP)(原出处:不详)
- 面向对象设计原则(五):依赖倒置原则(DIP)
- 依赖倒置原则(DIP) OOP面向对象...
- 面向对象设计原则--里氏替换原则(LSP)和依赖倒置原则(DIP)
- 设计模式--------依赖倒置原则(DIP)
- 开放封闭原则(OCP)--深度剖析--面向对象设计(OOD)
- 单一职责原则(SRP)--深度剖析--面向对象设计(OOD)
- 面向对象设计原则之依赖注入原则(DIP)
- 面向对象设计原则之依赖倒置
- 面向对象的设计原则:依赖倒置
- 依赖倒置原则(DIP)
- 依赖倒置原则(DIP)
- 设计原则(四)依赖倒置原则(DIP)
- More Effective C++ 学习笔记
- Fastest Way to Update Rows in a Large Table in SQL Server
- ACM(002)括号配对问题(3)
- 从HelloWorld中我们能学到什么
- 可变java对象存入hashSet引发的问题
- 依赖倒置原则(DIP)--深度剖析--面向对象设计(OOD)
- 一些开源产品,没事可以读读源代码
- 替换原则(LSP)--深度剖析--面向对象设计(OOD)
- 天龙八部
- struts2上传文件upload(多文件上传)
- eclipse中Program arguments和VM arguments的区别
- 开放封闭原则(OCP)--深度剖析--面向对象设计(OOD)
- springjdbc NamedParameterJdbcTemplate 数据转换无效
- 【Angular】内核