前面有幾篇文章,已經教了一些方式或者方法,幫助您擺脫娘胎自帶的面向過程程式設計,從而轉為物件導向。
本文講一下物件導向依賴倒置,使用具體的例子來解釋可能好些,網上千篇一律的大多數文字描述,各位估計也不一定真的看明白了。於是,這就是本文的價值所在。
由於我一路走過來,所以,我寫的關於物件導向的思想,都是實踐性的經驗,會站在您還是乙個初學者的身份上去講述它,盡量讓讀者明白。
本文例子出現的中文是為了便於理解,您實際編寫**時,不宜寫中文。
一、什麼是依賴倒置
普遍的解釋是:程式要依賴於抽象介面,不要依賴於具體實現。
這話我當初看了無數遍,在我初期對物件導向理解還不深的時候,我認識這些字理解這些話,以為自己懂了,實際上,我壓根不會用。很長一段時間的實踐之後,我才終於明白這話的意思。
二、理解倒置
依賴倒置,倒置的意思就是反過來、翻轉過來、倒轉過來。本來是先看到頭後看到尾的,倒立過來後,就先看到尾再看到頭。總之就是反轉過來。
三、理解依賴
當初我怎麼都想不明白依賴是個啥東西,怎麼回事。其實這是因為我當時對依賴不理解的原因,您今天不理解也正是因為這個原因。所以:
您需要了解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...