立即學習: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(); } }