依賴倒轉(zhuǎn)原則(Dependency Inversion  Principle, DIP):抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象。換言之,要針對抽象(接口)編程,而不是針對實現(xiàn)細(xì)節(jié)編程。

開閉原則(OCP)是面向?qū)ο笤O(shè)計原則的基礎(chǔ)也是整個設(shè)計的一個終極目標(biāo),而依賴倒置原則(DIP )則是實現(xiàn)OCP原則的一個基礎(chǔ),換句話說開閉原則(OCP)是你蓋一棟大樓的設(shè)計藍(lán)圖,那么依賴倒置原則就是蓋這棟大樓的一個鋼構(gòu)框架,沒有鋼構(gòu)架構(gòu)是很難順利蓋起一棟大樓的,同樣的在面向?qū)ο筌浖O(shè)計的過程中不遵守依賴倒置原則是很難開發(fā)出符合開閉原則的軟件的。更不用說開發(fā)出易于維護(hù),易于升級的軟件。 因此開閉原則是非常重要的一個原則,它有很強(qiáng)的實操性,并且能夠直接指導(dǎo)我們寫代碼代碼。

通常要符合這個原則的第一步就是針對抽象編程,類之間的依賴關(guān)系盡量去使用高層抽象不要使用底層的實現(xiàn)細(xì)節(jié),從軟件工程來說高層抽象是較穩(wěn)定的,也就是說抽象具有一定的穩(wěn)定性,而實現(xiàn)細(xì)節(jié)較不穩(wěn)定,也就是說實現(xiàn)細(xì)節(jié)具有易變性,而我們期望軟件具有更好的穩(wěn)定性,顯而易見我們在開發(fā)的時候自然而然的要走穩(wěn)定路線(依賴抽象編程)。這個原則也是對軟件工程中要求“高聚低偶”實踐一個保障和指導(dǎo)。

我們來看一個例子假設(shè)我們在開發(fā)一個軟件產(chǎn)品需要一個日志系統(tǒng),要將系統(tǒng)產(chǎn)生的一些重要事情記錄在記事本上。通常我們的實現(xiàn)如下:

    public class Logger
    {        public void Info(string infoText)
        {
            Console.WriteLine($"[{DateTime.Now}][Info]:{infoText}");
        }        public void Debug(string debugText)
        {
            Console.WriteLine($"[{DateTime.Now}][Debug]:{debugText}");
        }        public void Warn(string warmText)
        {
            Console.WriteLine($"[{DateTime.Now}][Warm]:{warmText}");
        }        public void Error(string errorText,Exception exception)
        {
            Console.WriteLine($"[{DateTime.Now}][Error]:{errorText} - Exception:{exception.Message}");