日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )

發(fā)布時(shí)間:2025/6/17 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、依賴(lài)倒置原則簡(jiǎn)介
  • 二、面向?qū)崿F(xiàn)編程代碼示例 ( 反面示例 )
    • 1、顧客類(lèi)
    • 2、測(cè)試類(lèi)
  • 三、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用接口方法注入 IGood 實(shí)現(xiàn)類(lèi) )
    • 1、顧客類(lèi)
    • 2、商品接口
    • 3、冰箱商品
    • 4、電視商品
    • 5、測(cè)試類(lèi)
  • 四、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用構(gòu)造函數(shù)注入 IGood 實(shí)現(xiàn)類(lèi) )
    • 1、顧客類(lèi)
    • 2、商品接口
    • 3、冰箱商品
    • 4、電視商品
    • 5、測(cè)試類(lèi)
  • 五、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用 Setter 方法注入 IGood 實(shí)現(xiàn)類(lèi) )
    • 1、顧客類(lèi)
    • 2、商品接口
    • 3、冰箱商品
    • 4、電視商品
    • 5、測(cè)試類(lèi)





一、依賴(lài)倒置原則簡(jiǎn)介



依賴(lài)倒置原則 : 高層模塊 不應(yīng)該 依賴(lài) 低層模塊 , 二者都應(yīng)該 依賴(lài)其抽象 ;
抽象 不應(yīng)該 依賴(lài)細(xì)節(jié) , 細(xì)節(jié)應(yīng)該依賴(lài)抽象 ;

針對(duì)接口編程 , 不要針對(duì)實(shí)現(xiàn)編程 ;


通過(guò)抽象 , 包括使用 接口 或 抽象類(lèi) , 使個(gè)各類(lèi)或模塊之間 彼此獨(dú)立 , 互不影響 , 從而實(shí)現(xiàn)模塊之間的 松耦合 , 降低模塊間的耦合性 ;

使用依賴(lài)倒置原則時(shí)的注意點(diǎn) :

  • 每個(gè)類(lèi)都 盡量 實(shí)現(xiàn)自接口繼承抽象類(lèi) ;
  • 盡量 避免從具體的類(lèi)派生 ;
  • 盡量 不要覆蓋基類(lèi)方法 ;

依賴(lài)倒置原則的優(yōu)點(diǎn) : 減少類(lèi)之間的 耦合性 , 提高系統(tǒng) 穩(wěn)定性 , 提高 代碼可讀性 , 可維護(hù)性 , 可 降低修改程序所造成的風(fēng)險(xiǎn) ;





二、面向?qū)崿F(xiàn)編程代碼示例 ( 反面示例 )




1、顧客類(lèi)


package dependenceinversion;/*** 如果要增加一個(gè)新功能 , 就需要在該類(lèi)中添加一個(gè)新方法* 這就是面向?qū)崿F(xiàn)編程 , 該實(shí)現(xiàn)類(lèi)需要經(jīng)常進(jìn)行修改* 擴(kuò)展性很差** 應(yīng)用層的函數(shù) , 是依賴(lài)于底層實(shí)現(xiàn)的 , 由于沒(méi)有實(shí)現(xiàn)接口* 造成了應(yīng)用層的測(cè)試類(lèi) , 直接依賴(lài)于本類(lèi)* 應(yīng)用層的模塊屬于高層模塊* 本類(lèi)屬于低層模塊* 根據(jù)依賴(lài)倒置原則 , 高層次的模塊是不應(yīng)該依賴(lài)于低層次的模塊的*/ public class Customer {public void buyFridge() {System.out.println("購(gòu)買(mǎi)冰箱");}public void buyTelevision() {System.out.println("購(gòu)買(mǎi)電視");} }

2、測(cè)試類(lèi)


package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer();customer.buyFridge();customer.buyTelevision();} }

執(zhí)行結(jié)果 :

購(gòu)買(mǎi)冰箱 購(gòu)買(mǎi)電視





三、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用接口方法注入 IGood 實(shí)現(xiàn)類(lèi) )




1、顧客類(lèi)


使用接口方法注入 IGood 實(shí)現(xiàn)類(lèi) ;

package dependenceinversion;public class Customer {/*** 接口方法注入 IGood 實(shí)現(xiàn)類(lèi)* 也可以使用構(gòu)造函數(shù) , 注入 IGood 實(shí)現(xiàn)類(lèi)** 此處就是面向接口編程* 如果添加了新的類(lèi) , 不需要修改本類(lèi)* 只需要添加新的接口實(shí)現(xiàn)類(lèi)即可* 面向接口編程 , 而不是面向本實(shí)現(xiàn)類(lèi)* 對(duì)于高層模塊來(lái)說(shuō) , 具體傳入的參數(shù)是什么參數(shù) ,* 交給高層模塊選擇** 本類(lèi) 與 具體的 IGood 接口 實(shí)現(xiàn) 是解耦的* 本類(lèi) 與 應(yīng)用層 客戶端測(cè)試類(lèi) 之間是解耦的** 如果在添加一個(gè)新商品 , 直接定義一個(gè)新的接口實(shí)現(xiàn)類(lèi)即可** @param iGood*/public void buy(IGood iGood) {iGood.buy();} }

2、商品接口


package dependenceinversion;/*** 商品接口*/ public interface IGood {/*** 購(gòu)買(mǎi)商品*/void buy(); }

3、冰箱商品


package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)冰箱");} }

4、電視商品


package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)電視");} }

5、測(cè)試類(lèi)


package dependenceinversion;public class Main {public static void main(String[] args) {Customer customer = new Customer();customer.buy(new FridgeGood());customer.buy(new TelevisionGood());} }

執(zhí)行結(jié)果 :

購(gòu)買(mǎi)冰箱 購(gòu)買(mǎi)電視





四、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用構(gòu)造函數(shù)注入 IGood 實(shí)現(xiàn)類(lèi) )




1、顧客類(lèi)


使用構(gòu)造函數(shù)注入 IGood 實(shí)現(xiàn)類(lèi) ;

package dependenceinversion;public class Customer {private IGood iGood;/*** 使用構(gòu)造函數(shù)注入 IGood 實(shí)現(xiàn)類(lèi)* @param iGood*/public Customer(IGood iGood) {this.iGood = iGood;}public void buy() {this.iGood.buy();} }

2、商品接口


package dependenceinversion;/*** 商品接口*/ public interface IGood {/*** 購(gòu)買(mǎi)商品*/void buy(); }

3、冰箱商品


package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)冰箱");} }

4、電視商品


package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)電視");} }

5、測(cè)試類(lèi)


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();} }

執(zhí)行結(jié)果 :

購(gòu)買(mǎi)冰箱 購(gòu)買(mǎi)電視





五、依賴(lài)倒置原則代碼示例 ( 推薦示例 | 使用 Setter 方法注入 IGood 實(shí)現(xiàn)類(lèi) )




1、顧客類(lèi)


使用 Setter 方法注入 IGood 實(shí)現(xiàn)類(lèi) ;

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 {/*** 購(gòu)買(mǎi)商品*/void buy(); }

3、冰箱商品


package dependenceinversion;/*** 冰箱商品*/ public class FridgeGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)冰箱");} }

4、電視商品


package dependenceinversion;/*** 電視商品*/ public class TelevisionGood implements IGood {@Overridepublic void buy() {System.out.println("購(gòu)買(mǎi)電視");} }

5、測(cè)試類(lèi)


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();} }

執(zhí)行結(jié)果 :

購(gòu)買(mǎi)冰箱 購(gòu)買(mǎi)電視

總結(jié)

以上是生活随笔為你收集整理的【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。