只記錄自己的理解努潘,對于網上通用的解釋不做記錄
首先是六個面向對象原則:下面是我自己的分類:根據實現方式分為兩類,一類是跟多態(tài)有直接關系的坤学、一類是無關的
- 單一職責疯坤、接口隔離
- 開閉、里氏替換深浮、依賴倒置压怠、迪米特
- 對于開閉原則的理解:在要修改的時候,應該采用擴展的方式飞苇,不應該這樣理解:對擴展開放菌瘫、對修改關閉
// 面向接口編程,幾乎能對應到上面四個原則的實現
Interface inf = new Class(); //或者延遲初始化布卡,使用外部設置進來的值
inf.xxx();
// 依賴倒置原則(高層模塊不應依賴于低層模塊雨让,兩者應該依賴于抽象;抽象不不應該依賴于實現忿等,實現應該依賴于抽象)
高層模塊 -> 接口 <- 底層模塊
其次是DIP栖忠、IOC(DI是IOC的一種實現方式):分別是:依賴倒置、控制反轉贸街、依賴注入
DIP:同上面的依賴倒置原則
-
IOC:有三個東西:依賴方庵寞、被依賴方、依賴控制器
- 一般使用DI方式實現IOC薛匪。如下示例可以看出:沒有基于IOC方式皇帮,card依賴由ATM本身控制,而實現了IOC之后蛋辈,card依賴就不再由ATM控制了属拾,而是由第三方來控制(第三方通過調用
setCard()
決定給ATM注入什么樣的依賴)- DI一般可以通過構造函數、或者是抽出一個接口來冷溶,對依賴進行控制渐白,還可以由IOC容器實現
// 示例:ATM依賴Card,沒有基于IOC class ATM { private var card: Card = Card() } // 基于IOC class ATM : IController { private var card: Card? = null override fun setCard(card: Card) { this.card = card } }
- 一般使用DI方式實現IOC薛匪。如下示例可以看出:沒有基于IOC方式皇帮,card依賴由ATM本身控制,而實現了IOC之后蛋辈,card依賴就不再由ATM控制了属拾,而是由第三方來控制(第三方通過調用