设计模式六大原则-依赖倒转原则(3/6)

200 阅读2分钟

概念

依赖倒转原则的定义是高层模块不应该依赖底层模块的代码,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

大白话说就是要面向抽象类/接口编程,不要面向实现类编程,其实依赖倒转原则就是开闭原则的具体实现,开闭原则意思是对添加开发对修改关闭,即不建议修改原有方法,当需要实现新的功能的时候,新建一个实现类即可,而依赖倒转原则意思就是依赖接口/抽象类而不是某个具体的实现类。

实现案例

场景是这样的,母亲给孩子讲故事,只要给她一本书,她就可以照着书给孩子讲故事了。代码如下:

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日起,中国将对外宣称中国史一个发达国家……