为什么需要解耦?
版權(quán)聲明:本文為 小異常 原創(chuàng)文章,非商用自由轉(zhuǎn)載-保持署名-注明出處,謝謝!
本文網(wǎng)址:https://blog.csdn.net/sun8112133/article/details/81040275
為什么需要解耦?回答這個問題,我們必須得知道什么是解耦。相信大多數(shù)小伙伴們都在軟件工程中聽過這樣一句話 —— “高內(nèi)聚,低耦合”。那么什么是 “高內(nèi)聚” ,什么是 “低耦合” 呢? 別著急,請聽我慢慢道來。
本篇大體可以分為三大部分:
一、什么是內(nèi)聚
二、什么是耦合
三、使用高內(nèi)聚,低耦合的好處
一、什么是內(nèi)聚
內(nèi)聚,從字面上來看有聚精會神、聚在一起的意思,那么 高內(nèi)聚也就是盡可能的使一個模塊或一個類再或者是一個方法只專注做好一件事。
我們在設(shè)計軟件的時候一定要采取【多聚合、少繼承】的基本原則,因為使用 “聚合” 的這種方式能夠使業(yè)務(wù)邏輯更加清晰,更有利于我們后期的擴(kuò)展和維護(hù)。
二、什么是耦合
耦合,從字面上來看有藕斷絲連的意思,“耦” 這個字在中國漢語里指的是兩個人在一起耕地,他倆各干各的互不影響,這也是“耦合”的由來。那么 低耦合也就是盡可能的使每個模塊之間或者每個類之間再或者是每個方法之間的關(guān)聯(lián)關(guān)系減少,這樣可以使各自盡可能的獨(dú)立,一個地方出錯,不會影響全部,更能提高代碼的重用性。
我們在設(shè)計軟件的時候也一定要注意各模塊之間一定盡可能的減少聯(lián)系,防止一個模塊出現(xiàn)的問題影響到其他模塊。
三、使用高內(nèi)聚,低耦合的好處
1、生活中的 “高內(nèi)聚,低耦合”
軍隊的存在是為了保家衛(wèi)國,我們國家的軍隊分為海軍、陸軍、空軍等部隊,他們各自的職責(zé)是不一樣的。海軍負(fù)責(zé)海上作戰(zhàn),陸軍負(fù)責(zé)陸地作戰(zhàn),空軍負(fù)責(zé)空中作戰(zhàn),他們之間的聯(lián)系很少。
我們可以想想為什么要這樣安排呢?如果我們國家的軍隊不分的那么細(xì),每支部隊都有在海上、陸地、空中作戰(zhàn)的士兵,如果我們和日本在海上大戰(zhàn),我們還需要從各個部隊中抽取能夠在海上作戰(zhàn)的士兵,再組成一支海上抗日軍這樣的部隊,抽取出來的士兵的戰(zhàn)斗力各有不一,還需要一個適應(yīng)的過程,我們想想這支一盤散沙的部隊能取得勝利嘛?打仗在于兵貴神速,這樣的一支部隊還是一盤散沙呢,怎么能做到兵貴神速呢?那么我們可以早早的就把他們分為海軍、陸軍、空軍,海軍就負(fù)責(zé)在海上作戰(zhàn),陸軍就負(fù)責(zé)在陸地作戰(zhàn),空軍就負(fù)責(zé)在空中作戰(zhàn),我們?nèi)绻腿毡具M(jìn)行海上大戰(zhàn),我們直接派海軍過去不就可以了嘛?
根據(jù)我們剛才的分析,證明了軍隊分為海軍、陸軍、空軍的好處,那么我們再想想,他們之間的聯(lián)系為什么會很少呢?咱們還是假設(shè)一下,如果每個部隊總是依賴其他幾個部隊,不會獨(dú)立戰(zhàn)斗,那么如果某一天海軍被派出去執(zhí)行任務(wù),美國這個時候空軍來襲,我們的空軍難道要等海軍回來再戰(zhàn)斗嘛?如果那樣的話為時晚矣,我們國家早就被侵略了。所以他們之間應(yīng)該獨(dú)立作戰(zhàn),互相依賴的情況應(yīng)該要減少。
這就是生活中的 “高內(nèi)聚,低耦合” 的例子。類似這樣的例子還有很多,只要我們留心觀察就能發(fā)現(xiàn)。
2、Java中的 “高內(nèi)聚,低耦合”
耦合放到我們Java里面就是兩個類之間的聯(lián)系的緊密程度,看下面這段代碼:
從上面這個例子中我們可以看出來,A類 和 B類 之間存在一種很強(qiáng)的一個聯(lián)系,我們把這種聯(lián)系稱為強(qiáng)耦合關(guān)系,B類的 put方法 參數(shù)必須是 A類類型,不可以是 非A類類型。
當(dāng)然了,既然有強(qiáng)耦合關(guān)系當(dāng)然也存在所謂的弱耦合關(guān)系,弱耦合也就是我們俗說的低耦合。那么請看下面這段代碼:
上面這段代碼中 C類 與 A類、B類之間就存在一種弱耦合關(guān)系,C類 的 put方法 的參數(shù)可以是 A類類型 也可以是 B類類型,不像強(qiáng)耦合關(guān)系中必須是 A類類型 其他類型皆不可的情形。
我們實(shí)現(xiàn)低耦合就是對兩類之間進(jìn)行解耦,解除類之間的直接關(guān)系,將直接關(guān)系轉(zhuǎn)換成間接關(guān)系,和上面代碼一樣,這種思想利用了多態(tài)的思想,我們一般情況都是使用接口的方式來實(shí)現(xiàn)解耦的。
“高內(nèi)聚,低耦合”,用一句話概括就是寫的代碼盡可能專一的完成一個任務(wù),且各段代碼盡量模塊化互相獨(dú)立。
總結(jié)
- 上一篇: d3dcompiler_43.dll的错
- 下一篇: 科普:DisplayPort与HDMI的