Java 设计模式(十二) 依赖倒置原则(DIP)
2016-05-09 20:03
633 查看
依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则(DIP)的基本概念
原始定义
高层模块不应该依赖低层模块,两者都应该依赖其抽象抽象不应该依赖细节
细节应该依赖抽象
Java中的具体含义
模块间的依赖通过抽象发生实现类之间不发生直接的依赖关系
其依赖关系通过接口或者抽象类产生
接口或抽象类不依赖于具体实现
实现类依赖接口或抽象类
依赖倒置(DIP)的好处
采用DIP可以减少类之间的耦合性,提高稳定性,降低并行开发带来的风险,提高代码的可读性和可维护性通过抽象(接口或者抽象类)使各个类和模块的实现彼此独立,不互相影响,实现模块之间的松耦合
DIP是开闭原则实现的基础
例讲DIP
比如我们有一个场景,学生要用笔写做作业。我们如果直接实现,那么当需求改变,学生要用笔画画的时候,我们就要修改作业类,那么就不符合开闭原则,而且每次拓展都会破坏之前的类,这样是不友好的,那么如何根据DIP来设计这个场景呢?抽象出接口,并利用抽象接口建立联系
interface Tool{ public void doWork( Job job ); } interface people{ public void use ( Tool tool , Job job ); } interface Job{ public void finish(); }
我们抽象出了人,工作,任务三个抽象接口,然后我们利用人使用工具完成工作的场景对三个抽象接口建立关系
分别实现具体的逻辑
class Student1 implements Person{ @Override public void use(Tool tool, Job job) { System.out.print("Student use "); tool.doWork(job); } } class Pencil implements Tool{ @Override public void doWork(Job job) { System.out.print("Pencile to do "); job.finish(); } } class HomeWork implements Job{ @Override public void finish() { System.out.println("Homework!!"); } }
三个类可以并行实现,完全没有耦合关系,实现程序的模块化和并行开发
那么我们测试一下:
public class DIPTest { public static void main ( String [] args ){ Person student = new Student1(); Tool pencil = new Pencil(); Job homeWork = new HomeWork(); student.use(pencil,homeWork); } }
当我们需要实现同样关系的新的类时,只需要拓展就可以了,比如老师用讲义授课依旧可以采取这种模式,可以按照模块进行开发,在团队开发项目的时候效果明显
现实中的经典范例
TDD( Test Driving Developing)测试驱动开发
就是利用一种契约的模式:先提供接口
然后利用接口的关系和方法写好单元测试类
然后再写实现类,这对提高代码质量有非常大的帮助,特别适合研发类的项目或在项目成员整体水平比较低的情况下采用
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序