国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

面向?qū)ο笤O(shè)計(jì)原則-依賴倒置

Zhuxy / 2906人閱讀

摘要:依賴倒置在面向?qū)ο笤O(shè)計(jì)中有一個重要的原則是依賴倒置,主要作用是解耦,讓對象與對象之間松耦合。現(xiàn)在根據(jù)依賴倒置原則對例子進(jìn)行修改。

依賴倒置

在面向?qū)ο笤O(shè)計(jì)中有一個重要的原則是依賴倒置(Dependence Inversion Principle),主要作用是解耦,讓對象與對象之間松耦合。定義如下:高層模塊不應(yīng)該依賴底層模塊,他們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。

光看定義很難理解依賴倒置到底是什么意思,先舉一個簡單的例子。

有以下兩個類:

public class Dao {

    private MysqlConnection connection;

    public Dao(MysqlConnection connection) {
        this.connection = connection;
    }

    public void findAll() {
        connection.executeQuery("SELECT * FROM test");
    }

}
public class MysqlConnection {

    public void executeQuery(String sql) {
        System.out.println(sql);
    }

}

Dao類通過調(diào)用MysqlConnection類的executeQuery方法執(zhí)行sql語句,依賴關(guān)系如下圖所示:

這里就違反了依賴倒置原則,高層模塊DAO強(qiáng)耦合了底層模塊MysqlConnection。如果系統(tǒng)需要更換數(shù)據(jù)庫為SqlServer,我們就不得不去修改Dao類,增加一個SqlserverConnection類,這又違反了面向?qū)ο笤O(shè)計(jì)的開閉原則。例子中的Dao是一個不穩(wěn)定、隨時會因?yàn)榈讓幽K的變更而出現(xiàn)BUG的類。

現(xiàn)在根據(jù)依賴倒置原則對例子進(jìn)行修改。

public class Dao {

    private Connection connection;

    public Dao(Connection connection) {
        this.connection = connection;
    }

    public void findAll() {
        connection.executeQuery("SELECT * FROM test");
    }

}
public interface Connection {

    void executeQuery(String sql);

}
public class MysqlConnection implements Connection {

    @Override
    public void executeQuery(String sql) {
        System.out.println(sql);
    }

}

Dao類通過調(diào)用Connection接口的executeQuery方法執(zhí)行sql語句,依賴關(guān)系如下圖所示:

修改后的Dao類依賴于Connection抽象接口,MysqlConnection類也以實(shí)現(xiàn)接口的方式依賴于Dao類。這時如果要更換為SqlServer數(shù)據(jù)庫,只要增加一個SqlserverConnection類并實(shí)現(xiàn)Connection接口就完成了,不需要去修改Dao類了,大大的降低了耦合度。

之所以要細(xì)節(jié)依賴于抽象,歸根結(jié)底是因?yàn)槌橄笫菍?xì)節(jié)的歸納和本質(zhì)總結(jié),細(xì)節(jié)可能會不停的變更,其本質(zhì)卻不會變化。依賴倒置原則感覺和面向接口編程的思想是如出一轍的,同樣都是通過依賴抽象來降低耦合度,只是側(cè)重點(diǎn)不同。

只是看書可能學(xué)習(xí)效率并不是很高,還是需要多寫寫學(xué)到的東西,這就是這篇文章出現(xiàn)的理由了。可能會有錯誤或不全的地方,歡迎指出。

我的個人博客

參考資料:

那些年搞不懂的高深術(shù)語——依賴倒置?控制反轉(zhuǎn)?依賴注入?面向接口編程

【面向?qū)ο笤O(shè)計(jì)原則】之依賴倒置原則(DIP)

依賴倒置原則

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71477.html

相關(guān)文章

  • 面向對象基本原則(2)- 里式代換原則依賴倒置原則

    摘要:四依賴倒置原則依賴倒置原則簡介依賴倒置原則的英文名稱是,簡稱。依賴倒置原則的表現(xiàn)其實(shí)就是面向接口編程。依賴倒置原則的優(yōu)點(diǎn)減少類間的耦合性,提高系統(tǒng)的穩(wěn)定性。結(jié)合里氏替換原則使用接口負(fù)責(zé)定義屬性和方法,并且聲明與其他對象的依賴關(guān)系。 面向?qū)ο蠡驹瓌t(2)- 里式代換原則與依賴倒置原則 面向?qū)ο蠡驹瓌t(1)- 單一職責(zé)原則與接口隔離原則面向?qū)ο蠡驹瓌t(2)- 里式代換原則與依賴倒置原...

    liangdas 評論0 收藏0
  • PHP面向對象設(shè)計(jì)的五大原則

    摘要:面向?qū)ο笤O(shè)計(jì)的五大原則單一職責(zé)原則接口隔離原則開放封閉原則替換原則依賴倒置原則。主要是針對繼承的設(shè)計(jì)原則,繼承與派生多態(tài)是的主要特性。 面向?qū)ο笤O(shè)計(jì)的五大原則:單一職責(zé)原則、接口隔離原則、開放-封閉原則、替換原則、依賴倒置原則。這些原則主要是由Robert C.Martin在《敏捷軟件開發(fā)——原則、方法、與實(shí)踐》一書中總結(jié)出來,這五大原則也是23種設(shè)計(jì)模式的基礎(chǔ)。 單一職責(zé)原則 Sin...

    adam1q84 評論0 收藏0
  • Java設(shè)計(jì)模式-六大原則

    摘要:依賴倒置原則是個設(shè)計(jì)原則中最難以實(shí)現(xiàn)的原則,它是實(shí)現(xiàn)開閉原則的重要途徑,依賴倒置原則沒有實(shí)現(xiàn),就別想實(shí)現(xiàn)對擴(kuò)展開放,對修改關(guān)閉。 1、單一職能原則(Single Responsibility Principle, SRP) 定義 There should never be more than one reason for a class to change.應(yīng)該有且僅有一個原因引起類的...

    molyzzx 評論0 收藏0
  • 初探面向對象編程之oop與設(shè)計(jì)模式

    摘要:為什么要采用面向?qū)ο缶幊探鉀Q問題更容易設(shè)計(jì)計(jì)算機(jī)程序就是為了解決人類的問題。面向?qū)ο缶幊绦枰獙I(yè)務(wù)及代碼的架構(gòu)是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過程式編程 面向?qū)ο缶幊? 在講面向?qū)ο缶幊虝r先講一下什么是順序編程,什么是過程式編程,什么是面向?qū)ο缶幊蹋? 順序編程: 就是只用一個單線程去執(zhí)行一段代碼,執(zhí)行過程根據(jù)代碼依次從上...

    BingqiChen 評論0 收藏0
  • 深入理解JavaScript系列10:S.O.L.I.D五大原則依賴倒置原則

    摘要:前言本章我們要講解的是五大原則語言實(shí)現(xiàn)的第篇,依賴倒置原則。當(dāng)應(yīng)用依賴倒置原則的時候,關(guān)系就反過來了。在當(dāng)靜態(tài)類型語言的上下文里討論依賴倒置原則的時候,耦合的概念包括語義和物理兩種。依賴倒置原則和依賴注入都是關(guān)注依賴,并且都是用于反轉(zhuǎn)。 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語言實(shí)現(xiàn)的第5篇,依賴倒置原則LSP(The Dependency Invers...

    chenjiang3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<