立即学习:https://edu.csdn.net/course/play/28942/403589?utm_source=blogtoedu
依赖倒置原则:Dependence Inversion Principle
定义:高层模块不依赖低层模块,二者都应该依赖其抽象
抽象不应该依赖细节、细节应该依赖抽象
针对接口编程、不要针对实现编程
优点:可以减少类之间的耦合性、提高系统的稳定性、提高代码的可读性和可维护性,降低修改程序所造成的风险
例:小明学习
关于小明学习这个事情,首先要有小明(类),小明有一个学习的动作(方法),
class XiaoMing{ void study(){ } }
我们抽象出一个学习的接口,作为参数传入小明学习的这个动作中,
interface ICourse(){ void study(); } class XiaoMing{ void study(ICourse icourse){ icourse.study(); } }
当小明需要学习某门课程的时候,我们先通过实现学习接口的方式,实例化学习的课程
class JavaCourse implements ICourse{ void study(){ System.out.println("学习java"); } }
然后将实例后的课程学习作为参数(依赖)传递给小明、让小明来进行学习的动作,
class XiaoMing{ private ICourse icourse; public XiaoMing(ICourse icourse){ this.icourse = icourse; } void study(){ icourse.study(); } }
达到小明学习的目的
class Test{ public static void main(String[] args) { XiaoMing xiaoMing = new XiaoMing(new JavaCourse); xiaoMing.study(); } }
当小明为单例时,我们不能通过构造方法来进行传递参数,此时我们需要给小明一个选择(set方法)
class XiaoMing{ private ICourse icourse; public void setiCourse(ICourse icourse){ this.icourse = icourse; } void study(){ icourse.study(); } } class Test{ public static void main(String[] args) { XiaoMing xiaoMing = new XiaoMing(); xiaoMing.setiCourse(new JavaCourse); xiaoMing.study(); } }