定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
具体到Java中就是“面向接口编程”。
例子:
违法依赖倒置的情况
public class Student { public void read(Book book){ System.out.println("学生开始阅读:"+book.getName()); } } public class Book { public String getName() { return "书籍"; } }
当学生需要阅读网页时,就需要修改Student类,这是很不友好的设计。下面我们看遵守依赖倒置原则的例子。
public interface Person { public void read(Reader reader); } public interface Reader { public String getName(); } public class Student implements Person{ @Override public void read(Reader reader) { System.out.println("学生开始阅读:"+reader.getName()); } } public class Book implements Reader { public String getName() { return "书籍"; } } public class Website implements Reader { public String getName() { return "网页"; } } public class Test { public static void main(String[] args) { Person student = new Student(); student.read(new Book()); student.read(new Website()); } }
在read方法中我们使用了接口作为参数。
总结:
1. 每个类最好有接口或者抽象类,或者同时接口和抽象类都有。
2. 变量声明最好是接口或者抽象类。
3. 继承时遵守里氏替换原则。
原文链接:https://www.f2er.com/javaschema/286331.html