物件導向設計原則詳解:依賴倒置原則

來源:互聯網
上載者:User

 定義:抽象不應該依賴於細節。細節應該依賴於抽象。程式中所有的依賴關係都應該終止於抽象類別和介面。針對介面而非實現編程。任何變數都不應該持有一個指向具體類的指標或引用。任何類都不應該從具體類派生。任何方法都不應該覆寫他的任何基類中的已經實現了的方法。
    說通俗一點就是,你抽象了一個類,這個類在這個工程中可以用,如果再做一個工程,移植過來還能用。遵循這一目的是為了代碼的複用。不過這一條規則我覺得原則上可以遵守,但是不一定非要遵守。除非你確定目前的工程,在後續的新工程中需要複用。比如說,開發手機的系統,一般情況下後續多個型號都是以第一個開發出的那個系統為基礎的。模組移植很多,這種情況下必須考慮依賴倒置原則。但是如果你正在做的工程,你很清楚這個工程,後面的開發不會再用目前的代碼了,比如,下一個版本的軟體要換另一種語言開發,那就沒必要非得遵守這個原則了。
    如何遵守依賴倒置原則呢?
    1、通過建構函式或者方法傳遞依賴對象;
    2、通過set方法傳遞依賴對象;
    3、介面聲明實現依賴對象。
    結合以上三條,看下面的例子。
    例如,一個程式員開始寫代碼。

    public class CSharp    {        public void Coding()        {            Console.WriteLine("使用C#開始寫代碼。");        }    }    public class Programer    {        private string name;        public Programer(string name)        {            this.name = name;        }        public void Coding(CSharp csharp)        {            Console.Write(name);            csharp.Coding();        }    }

調用

  static void Main(string[] args)  {     Programer programer = new Programer("小白");     programer.Coding(new CSharp());     Console.ReadLine();  }

輸出:

小白使用C#開始寫代碼。

可是這樣programer只會用C#,這不行的,要多學幾門程式設計語言。c#只是一門程式設計語言,抽象一下。

    public abstract class ProgramLangvage    {         public abstract void Coding();    }    public class CSharp:ProgramLangvage    {        public override void Coding()        {            Console.WriteLine("使用C#開始寫代碼。");        }    }    public class Java : ProgramLangvage    {        public override void Coding()        {            Console.WriteLine("使用Java開始寫代碼。");        }    }    public class Programer    {        private string name;        public Programer(string name)        {            this.name = name;        }        public void Coding(ProgramLangvage programLnagvage)        {            Console.Write(name);            programLnagvage.Coding();        }    }

 調用

     class Program    {        static void Main(string[] args)        {            Programer programer = new Programer("小白");            programer.Coding(new CSharp());            programer.Coding(new Java());            Console.ReadLine();        }    }

 輸出:
 小白使用C#開始寫代碼。
 小白使用Java開始寫代碼。
 這樣Programer和ProgramLangvage結合,就達到了複用的目的,在其他工程中,只需對ProgramLangvage實現不同就可以了,調用programer.Coding的地方基本不用修改。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.