概念
依赖倒转原则的定义是高层模块不应该依赖底层模块的代码,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
大白话说就是要面向抽象类/接口编程,不要面向实现类编程,其实依赖倒转原则就是开闭原则的具体实现,开闭原则意思是对添加开发对修改关闭,即不建议修改原有方法,当需要实现新的功能的时候,新建一个实现类即可,而依赖倒转原则意思就是依赖接口/抽象类而不是某个具体的实现类。
实现案例
场景是这样的,母亲给孩子讲故事,只要给她一本书,她就可以照着书给孩子讲故事了。代码如下:
class Book{
public String getContent(){
return "很久很久以前有一个阿拉伯的故事……";
}
}
class Mother{
public void narrate(Book book){
System.out.println("妈妈开始讲故事");
System.out.println(book.getContent());
}
}
public class Client{
public static void main(String[] args){
Mother mother = new Mother();
mother.narrate(new Book());
}
}
运行结果是:
妈妈开始讲故事
很久很久以前有一个阿拉伯的故事……
看起来没有问题,如果有一天,妈妈想要讲的不是故事,而是一份报纸,这个时候narrate方法则无法实现,因为narrate方法依赖的是Book这个类,如果想要换成其他东西就要改narrte方法
依据依赖倒转原则,实现的代码如下
class Newspaper implements IReader {
public String getContent(){
return "据媒体报道,2030年1月1日起,中国将对外宣称中国史一个发达国家……"; }
}
class Book implements IReader{
public String getContent(){
return "很久很久以前有一个阿拉伯的故事……";
}
}
class Mother{
public void narrate(IReader reader){
System.out.println("妈妈开始讲故事");
System.out.println(reader.getContent());
}
}
public class Client{
public static void main(String[] args){
Mother mother = new Mother();
mother.narrate(new Book());
mother.narrate(new Newspaper());
}
}
运行结果如下:
妈妈开始讲故事
很久很久以前有一个阿拉伯的故事……
妈妈开始讲故事
据媒体报道,2030年1月1日起,中国将对外宣称中国史一个发达国家……