【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )
生活随笔
收集整理的這篇文章主要介紹了
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、依賴倒置原則簡介
- 二、面向實現編程代碼示例 ( 反面示例 )
- 1、顧客類
- 2、測試類
- 三、依賴倒置原則代碼示例 ( 推薦示例 | 使用接口方法注入 IGood 實現類 )
- 1、顧客類
- 2、商品接口
- 3、冰箱商品
- 4、電視商品
- 5、測試類
- 四、依賴倒置原則代碼示例 ( 推薦示例 | 使用構造函數注入 IGood 實現類 )
- 1、顧客類
- 2、商品接口
- 3、冰箱商品
- 4、電視商品
- 5、測試類
- 五、依賴倒置原則代碼示例 ( 推薦示例 | 使用 Setter 方法注入 IGood 實現類 )
- 1、顧客類
- 2、商品接口
- 3、冰箱商品
- 4、電視商品
- 5、測試類
一、依賴倒置原則簡介
依賴倒置原則 : 高層模塊 不應該 依賴 低層模塊 , 二者都應該 依賴其抽象 ;
抽象 不應該 依賴細節 , 細節應該依賴抽象 ;
針對接口編程 , 不要針對實現編程 ;
通過抽象 , 包括使用 接口 或 抽象類 , 使個各類或模塊之間 彼此獨立 , 互不影響 , 從而實現模塊之間的 松耦合 , 降低模塊間的耦合性 ;
使用依賴倒置原則時的注意點 :
- 每個類都 盡量 實現自接口 或 繼承抽象類 ;
- 盡量 避免從具體的類派生 ;
- 盡量 不要覆蓋基類方法 ;
依賴倒置原則的優點 : 減少類之間的 耦合性 , 提高系統 穩定性 , 提高 代碼可讀性 , 可維護性 , 可 降低修改程序所造成的風險 ;
二、面向實現編程代碼示例 ( 反面示例 )
1、顧客類
package dependenceinversion;/*** 如果要增加一個新功能 , 就需要在該類中添加一個新方法* 這就是面向實現編程 , 該實現類需要經常進行修改* 擴展性很差** 應用層的函數 , 是依賴于底層實現的 , 由于沒有實現接口* 造成了應用層的測試類 , 直接依賴于本類* 應用層的模塊屬于高層模塊* 本類屬于低層模塊* 根據依賴倒置原則 , 高層次的模塊是不應該依賴于低層次的模塊的*/ public class Customer {public void buyFridge() {System.out.println("購買冰箱");}public void buyTelevision() {System.out.println("購買電視");} }
2、測試類
package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer();customer.buyFridge();customer.buyTelevision();} }
執行結果 :
購買冰箱 購買電視三、依賴倒置原則代碼示例 ( 推薦示例 | 使用接口方法注入 IGood 實現類 )
1、顧客類
使用接口方法注入 IGood 實現類 ;
package dependenceinversion;public class Customer {/*** 接口方法注入 IGood 實現類* 也可以使用構造函數 , 注入 IGood 實現類** 此處就是面向接口編程* 如果添加了新的類 , 不需要修改本類* 只需要添加新的接口實現類即可* 面向接口編程 , 而不是面向本實現類* 對于高層模塊來說 , 具體傳入的參數是什么參數 ,* 交給高層模塊選擇** 本類 與 具體的 IGood 接口 實現 是解耦的* 本類 與 應用層 客戶端測試類 之間是解耦的** 如果在添加一個新商品 , 直接定義一個新的接口實現類即可** @param iGood*/public void buy(IGood iGood) {iGood.buy();} }2、商品接口
package dependenceinversion;/*** 商品接口*/ public interface IGood {/*** 購買商品*/void buy(); }
3、冰箱商品
package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購買冰箱");} }
4、電視商品
package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購買電視");} }
5、測試類
package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer();customer.buy(new FridgeGood());customer.buy(new TelevisionGood());} }
執行結果 :
購買冰箱 購買電視四、依賴倒置原則代碼示例 ( 推薦示例 | 使用構造函數注入 IGood 實現類 )
1、顧客類
使用構造函數注入 IGood 實現類 ;
package dependenceinversion;public class Customer {private IGood iGood;/*** 使用構造函數注入 IGood 實現類* @param iGood*/public Customer(IGood iGood) {this.iGood = iGood;}public void buy() {this.iGood.buy();} }2、商品接口
package dependenceinversion;/*** 商品接口*/ public interface IGood {/*** 購買商品*/void buy(); }
3、冰箱商品
package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購買冰箱");} }
4、電視商品
package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購買電視");} }
5、測試類
package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer(new FridgeGood());customer.buy();Customer customer2 = new Customer(new TelevisionGood());customer2.buy();} }
執行結果 :
購買冰箱 購買電視五、依賴倒置原則代碼示例 ( 推薦示例 | 使用 Setter 方法注入 IGood 實現類 )
1、顧客類
使用 Setter 方法注入 IGood 實現類 ;
package dependenceinversion;public class Customer {private IGood iGood;public void setiGood(IGood iGood) {this.iGood = iGood;}public void buy() {this.iGood.buy();} }2、商品接口
package dependenceinversion;/*** 商品接口*/ public interface IGood {/*** 購買商品*/void buy(); }
3、冰箱商品
package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購買冰箱");} }
4、電視商品
package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購買電視");} }
5、測試類
package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer();customer.setiGood(new FridgeGood());customer.buy();customer.setiGood(new TelevisionGood());customer.buy();} }
執行結果 :
購買冰箱 購買電視總結
以上是生活随笔為你收集整理的【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】软件设计七大原则 ( 开闭原
- 下一篇: 【设计模式】软件设计七大原则 ( 接口隔