依賴倒置原則 C 教您一步步擺脫面向過程 依賴倒置

2021-10-12 17:12:49 字數 1681 閱讀 3174

前面有幾篇文章,已經教了一些方式或者方法,幫助您擺脫娘胎自帶的面向過程程式設計,從而轉為物件導向。

本文講一下物件導向依賴倒置,使用具體的例子來解釋可能好些,網上千篇一律的大多數文字描述,各位估計也不一定真的看明白了。於是,這就是本文的價值所在。

由於我一路走過來,所以,我寫的關於物件導向的思想,都是實踐性的經驗,會站在您還是乙個初學者的身份上去講述它,盡量讓讀者明白。

本文例子出現的中文是為了便於理解,您實際編寫**時,不宜寫中文。

一、什麼是依賴倒置

普遍的解釋是:程式要依賴於抽象介面,不要依賴於具體實現。

這話我當初看了無數遍,在我初期對物件導向理解還不深的時候,我認識這些字理解這些話,以為自己懂了,實際上,我壓根不會用。很長一段時間的實踐之後,我才終於明白這話的意思。

二、理解倒置

依賴倒置,倒置的意思就是反過來、翻轉過來、倒轉過來。本來是先看到頭後看到尾的,倒立過來後,就先看到尾再看到頭。總之就是反轉過來。

三、理解依賴

當初我怎麼都想不明白依賴是個啥東西,怎麼回事。其實這是因為我當時對依賴不理解的原因,您今天不理解也正是因為這個原因。所以:

您需要了解uml中的關聯和依賴。

您需要了解依賴注入中的依賴。

您需要了解屬性的定義,這個應該好理解。

您需要了解方法的定義,這個應該好理解。

物件導向中的依賴倒置,既指uml中的關聯,也指uml中的依賴,就是uml中的關聯和依賴都要適合這個原則。

依賴注入中的依賴,指屬性依賴以及方法的引數依賴,這2種都要適合這個原則。

上圖紅圈的是方法的引數依賴,下圖則是屬性依賴。

方法引數依賴,是指傳進去的方法引數,是乙個物件。屬性依賴是指返回值是乙個物件。

下圖則是依賴注入的依賴,通常是建構函式的方法引數進行依賴,當然也有屬性依賴注入的,就不舉例子了。

四、理解依賴後有什麼用?

通過上面的第3點,您已經知道了什麼叫依賴,但是你不知道依賴倒置的依賴,要怎麼用?

其實就是指:上面第3點中的所有依賴,傳遞過去的引數(方法),或者返回值(屬性),它們必須是抽象的。抽象是指抽象類和介面兩種。使用依賴倒置,則建議您更好的方式是使用介面,因為介面是頂級抽象。

所以,您會看到,第3點的截圖中,很多的依賴引數是傳遞的以字母i開頭的介面。

五、按照這麼做後,生產中實際會有什麼效果?

是的,您現在知道了要怎麼用。但您不知道為啥要這麼用,用了後會怎麼樣,不用就又會怎麼樣?

上圖是乙個形狀介面,以及黑板類。在黑板上繪製乙個圖形,需要使用形狀。

現在它的引數依賴是介面,所以,我可以傳遞正方形這個形狀,也可以傳遞圓錐、圓柱這些形狀。這就是依賴倒轉的應用。

如果您不使用介面,比如直接引數要求傳「正方形」,那麼,這個「在黑板上繪製圖形」的方法就是個死方法了,限定了只能傳正方形物件。

祝您用餐愉快。

教新手們如何一步步建立iOS工程

這一步不多說了,也不截圖了,如果還找不到,那先去看看xcode選單!建立好工程後,接下來可以建立podfile檔案了,用於配置第三方庫!通過終端進入剛才所建立的工程目錄,然後建立podfile檔案 vi podfile新增以下內容 source inhibit all warnings target...

區塊鏈技術如何工作? 一步步的教初學者

區塊鏈技術是網際網路3.0或網際網路協議。它由多種技術組合實現,正逐漸掀起一場革命。按照我們目前所了解的情況,它有可能改變許多業務場景,但並不那麼容易理解這些內容。所以接下來的內容讓你了解區塊鏈是如何工作的。3 如果有黑客試圖破解系統會怎麼樣?區塊鏈是乙個分散的不可變記錄的分布式資料庫,其中的交易收...

用C一步步開發web伺服器(2)

順著教程1往下走,這個章節我們需要開發支援併發的web伺服器,並加入容錯處理 首先加入容錯處理,建議將socket函式封裝在新的wrap socket.c檔案中,並建立他的.h檔案,server端include該檔案,重寫server端的部分 wrap socket.c檔案應該是這樣的 includ...